2013-08-29 2 views
1

Я создаю приложение iphone, и мне нужно центрировать переменное (от 1 до 3) количество кнопок на экране. Я бы хотел, чтобы каждая кнопка имела промежуток в 20.0f между ними и не разнесла их одинаково. Я сделал красивую картинку ниже, чтобы продемонстрировать, о чем я говорю.центр группы кнопок на экране

У меня труднее всего заставить это работать.

Вещи примечания:

int btnWidth = 50; 
int margin = 20; 

У меня есть постоянные kScreenWidth и kScreenHeight настройки для размеров экрана.

Я создаю кнопки как обычные внутри цикла, но математика для позиции x каждой кнопки ускользает от меня.

for (UIButton *btn in _someArray) { 
    UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    int x = ??????????; 
    button.frame = CGRectMake(x, (kScreenHeight * 0.75f), 50.0, 30.0); 
    [self.controller.currentView addSubview:button]; 
} 

Любая помощь с этим была бы принята с благодарностью. Кроме того, спасибо заранее.

enter image description here

+1

«У меня есть константы« kScreenWidth »и« kScreenHeight »для параметров экрана.« Это плохо. Вы должны спросить экран о его размерах. Разработчики iOS уже видели, что их предположения о размерности экрана ломаются дважды (однажды, когда iPad вышел, снова, когда вышел iPhone 5); не попадайте в очередь за # 3. –

+0

Это идеальный вариант для базовой автоматической компоновки. – uchuugaka

ответ

1

Допустим, вам нужны три кнопки в центре, а затем следующее процесс достижения координаты х каждого из 3-х кнопок.

//Define these globally somewhere 
CGSize buttonSize = CGSizeMake(50,50); 
int numOfButtons = 3; //num of buttons horizontally in one line. this will be 2 for 2nd and 1 for the third line as per your reference screen. 
CGFloat maxSeparationBwButtons = 20.0f; //your horizontal margin b/w buttons 
CGFloat screenWidth = [UIScreen mainScreen].bounds.size.width; 

CGFloat totalLengthWithOffsets = buttonSize.width*(CGFloat)numOfButtons+(maxSeparationBwButtons)*((CGFloat)(numOfButtons+1)); 
CGFloat originatingX = (screenWidth - totalLengthWithOffsets)/2.0f; 
//global definition ends... 

//Now you can use this method to get the desired button's x coordinate 
//Note : in 3 buttons the 1st button starts at position 0 and the last at 2 (aka n-1) 
-(CGFloat)getXForButtonAtPosition:(int)position 
{ 
    return (originatingX + maxSeparationBwButtons + (buttonSize.width+maxSeparationBwButtons)*(CGFloat)position); 
} 

В выше, вы можете изменить значение numOfButtons, buttonSize и maxSeparationBwButtons до нужного значения.

+0

Это замечательный ответ. Большое спасибо! – imns

+0

добро пожаловать! – CodenameLambda1

Смежные вопросы