Это то, что я выработал. Source Code
перечислимого типа для обозначения вы хотите vertial или горизонтально расположенные элементы
typedef enum {
ArrangementTypeHorz = 1,
ArrangementTypeVert = 2
}ArrangementType;
Заявленный номер или строк столбцов и тип расположения
@interface ATTViewController()
{
ArrangementType _arrangementType;
NSUInteger _rows;
NSUInteger _columns;
}
@end
Метод вычисляет кадр индекса элемент WRT SuperView
- (CGRect)frameForItemAtIndex:(NSUInteger)index inSuperView:(UIView *)superView
{
CGFloat blockWidth = floorf(superView.frame.size.width/_columns);
CGFloat blockHeight = floorf(superView.frame.size.height/_rows);
NSUInteger row = 0;
NSUInteger column = 0;
if (_arrangementType == ArrangementTypeHorz) {
row = floorf((CGFloat)index/_columns);
column = index - row*_columns;
}else{
column = floorf((CGFloat)index/_rows);
row = index - column*_rows;
}
CGFloat xOffset = 5.0f;
CGFloat yOffset = 5.0f;
return CGRectMake(blockWidth*column+xOffset,
blockHeight*row+yOffset,
blockWidth-(2*xOffset),
blockHeight-(2*yOffset));
}
Добавление кнопок в кон, tainerView. При добавлении набора строк, столбцов и компоновки Type
- (void)addButtonsToContainerView
{
NSUInteger numberOfItems = 5;
_rows = 2;
_columns = 3;
_arrangementType = ArrangementTypeVert;
NSUInteger itemCount = 0;
while (itemCount<numberOfItems)
{
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
CGRect frame = [self frameForItemAtIndex:itemCount inSuperView:self.containerView];
[button setFrame:frame];
NSString *title = [NSString stringWithFormat:@"Button %d",itemCount+1];
[button setTitle:title forState:UIControlStateNormal];
[self.containerView addSubview:button];
itemCount ++;
}
}
вы можете реализовать свою собственную логику. – Balu
Сколько кнопок вы хотели бы показать? и каждая строка содержит количество кнопок? –