2013-05-07 1 views
3

Я пытаюсь изучить Autolayout, поэтому я читаю учебники, а также разбираюсь с некоторыми UIViews, чтобы увидеть, что я могу заставить их сделать. Мне интересно, как бы я сделал что-то вроде рисунка ниже при переходе от портрета к пейзажу с автозапуском? Я подумал, например, что, если бы я привязал желтый к верхней части обзора, синий к желтому, оранжевому - к синему, а оранжевый - к нижней, они бы пропорционально изменяли размер, поддерживая 20 пикселей друг от друга и сверху и снизу. Но синяя коробка, например, не позволит мне удалить ее стойку в верхней части обзора, хотя она прикреплена к желтому надписью над ней, поэтому она толкает все вниз и с экрана в ландшафте. Я знаю, что вы можете выровнять высоты и ширину одинаково, чтобы изменить их размер, но есть ли способ пропорционально изменить размер, поддерживая расстояние между ними? enter image description hereiOS Autolayout пропорционально изменяет размер UIViews?

ответ

2

В интерфейсе Builder может возникнуть проблема с ограничениями, а Interface Builder еще не может создавать ограничения с помощью множителей, например blue.height = red.height * 0.5. Тем не менее, их легко сделать в коде.

Я использовал Interface Builder для создания и цвета UIViews, поэтому сначала я хочу удалить все ограничения, которые создавал Interface Builder.

// in UIViewController.m 
[self.view removeConstraints:self.view.constraints] ; 

Я создам много ограничений с использованием constraintsWithVisualFormat:options:metrics:views:, поэтому я создать словарь указателей на 5 UIViews и создать NSMutableArray для хранения ограничений.

NSDictionary* views = NSDictionaryOfVariableBindings(black, red, yellow, blue, orange) ; 
NSMutableArray* constraints = [NSMutableArray new] ; 

Затем я создаю ограничения, что позиция UIViews и указывают на виды, которые имеют те же ширины & высот.

[constraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[black]-[yellow]-|" options:0 metrics:nil views:views]] ; 
[constraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[red(==black)]-[blue(==yellow)]-|" options:0 metrics:nil views:views]] ; 
[constraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[orange]-|" options:0 metrics:nil views:views]] ; 
[constraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[black]-[red(==black)]-[orange]-|" options:0 metrics:nil views:views]] ; 
[constraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[yellow]-[blue]-[orange]-|" options:0 metrics:nil views:views]] ; 

И, наконец, я создаю ограничения с помощью множителей и добавляю все ограничения.

[constraints addObject:[NSLayoutConstraint constraintWithItem:orange attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:black attribute:NSLayoutAttributeHeight multiplier:0.5 constant:0]] ; 
[constraints addObject:[NSLayoutConstraint constraintWithItem:yellow attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:black attribute:NSLayoutAttributeHeight multiplier:1.5 constant:0]] ; 
[constraints addObject:[NSLayoutConstraint constraintWithItem:yellow attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:black attribute:NSLayoutAttributeWidth multiplier:1.5 constant:0]] ; 
[self.view addConstraints:constraints] ; 
0

Вы можете дать пропорциональное ограничение по высоте или ширине, выполнив следующие шаги.

1) Сначала дайте равное ограничение по высоте или ширине, что бы вы хотели дать в соответствии с требованиями.

2) Дважды щелкните ограничение на правой панели или нажмите «Изменить» в правой части ограничения.

3) Измените множитель следующим образом. Если вы добавили ограничение ширины ширины с ширины 100 на вид ширины 150, вы вводите множитель 150: 100.

4) Вам необходимо убедиться, что не будет никаких предупреждений относительно этого ограничения, иначе вам нужно будет изменить множитель, например, 100: 150.

5) Это происходит потому, что иногда, когда вы указываете ограничение по ширине или высоте, первым представлением будет сам вид, а иногда первым видом будет другой вид. Это полностью зависит от остальной части ограничения, которое вы задали для другого представления.

6) Теперь, когда ограничение применяется правильно, примените другие ограничения и проверьте.

спасибо.