2013-07-30 3 views
0

я хочу построить такой интерфейс: enter image description hereКнопки и авто макет

С Автокомпоновкой отключен, я успешно создали эти кнопки 6 и хорошо отлаженные их с помощью кода в зависимости от высоты экрана. Однако при отключении автоматического макета все остальные контроллеры становятся «грязными», поэтому я попытался создать/настроить эти кнопки с включенным автоматическим макетом. И НИКАКОЙ ПУТЬ для достижения такого интерфейса с включенным автоматическим макетом. Мой вопрос в том, есть ли трюк, решение настроить эти 6 кнопок с автоматическим расположением макета? Или, может быть, есть библиотека? Я действительно сложена. Благодарим вас за помощь.

+0

Что такое настройка? –

+0

@MaxMacLeod: каждая кнопка имеет screen_height/3 как ее высоту и screen_width/2 как ее ширину. – androniennn

+0

«НИКАКОЙ ПУТЬ для достижения такого интерфейса с автоматическим расположением макета» - конечно есть. Автоматическая компоновка может делать что угодно, и намного больше, чем распорки и пружины. Какую макет именно вы пытаетесь достичь? Предполагается ли, что эти 6 кнопок охватывают весь экран? Вы хотите, чтобы они приспособились к размеру экрана? К вращению? – rdelmar

ответ

2

Я вижу, что вы нашли ответ, но я все равно отправлю его, потому что он использует другой подход. Попытка получить ограничения в IB (в iOS 6), когда так много зависимостей между кнопками 6 затруднено (из-за ограничений, которые система добавляет для вас в IB), поэтому я сделал это в коде. Я сделал это таким образом, чтобы кнопки отображали весь экран на любом экране размера или любой ориентации без необходимости проверки размера экрана:

@interface ViewController() 
@property (strong,nonatomic) NSMutableDictionary *viewsDict; 
@end 

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.viewsDict = [NSMutableDictionary dictionary]; 
    for (int i=1; i<7; i++) { 
     UIButton *b = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
     [b setTitle:[NSString stringWithFormat:@"Button%d",i] forState:UIControlStateNormal]; 
     [b setTranslatesAutoresizingMaskIntoConstraints:NO]; 
     [self.viewsDict setObject:b forKey:[NSString stringWithFormat:@"b%d",i]]; 
     [self.view addSubview:b]; 
    } 

    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[b1][b2(==b1)]|" options:0 metrics:nil views:self.viewsDict]]; 
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[b3][b4(==b3)]|" options:0 metrics:nil views:self.viewsDict]]; 
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[b5][b6(==b5)]|" options:0 metrics:nil views:self.viewsDict]]; 
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[b1][b3(==b1)][b5(==b1)]|" options:0 metrics:nil views:self.viewsDict]]; 
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[b2][b4(==b2)][b6(==b2)]|" options:0 metrics:nil views:self.viewsDict]]; 
} 
+0

Честно говоря, ответ, который я нашел, не помог мне на 100%, я всегда сталкиваюсь с проблемой. Я попробую ваше решение. – androniennn

+0

Это сработало! Однако, пожалуйста, объясните мне код? 'constraintsWithVisualFormat'. много. – androniennn

+1

@andr oniennn, Это займет много времени, чтобы объяснить. Если у вас есть конкретный вопрос, я могу ответить на него. В противном случае я предлагаю вам посмотреть видео 3 WWDC 2012 по этому вопросу. Кроме того, документация охватывает синтаксис языка визуального формата. – rdelmar

0

С автозапуском вы обязательно захотите обернуть эти шесть видов в другом UIView, чтобы предотвратить взаимодействие макета между кнопками и другими видами. Если этот UIView имеет фиксированную высоту и ширину, это может быть так просто.

+0

Вы хотите сказать, что я добавляю UIView внутри основного UIView? – androniennn

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