2015-05-25 3 views
3

Мне нужно автовыбросить раскадровку UIView с помощью одного UIControl. UIControl должен быть центрирован, должен иметь соотношение сторон 1: 1 и должен всегда использовать 90% ширины или высоты супервизора в зависимости от ориентации устройства без обрезки.IOS8 Autolayout с относительной шириной/высотой

Я добавил 4 ограничений,

  1. Центр Y Alignment - Вид - SuperView
  2. Центр X Alignment - Просмотр - SuperView
  3. Равных ширин - Вид - SuperView с множителем 0,9
  4. Aspect Ratio - Вид - Вид с множителем, установленным в 1: 1

Эта настройка прекрасно работает в портретном режиме, но не работает в LAN dscape. (См. Рисунки ниже)

Какое ограничение мне нужно для решения этой проблемы. Нужно ли мне менять ограничения, если устройство повернуто?

режим Портрета Portrait mode

ландшафтный режим - неправильно Landscape mode - wrong

ландшафтный режим - макет. Это то, что я хочу. Landscape mode - ok

ответ

4

Вот способ сделать это:

  1. Начните с четырех ограничений, перечисленных выше: Центр X, Центр Y, Равные ширины (множитель 0,9) и Соотношение сторон, все с приоритетом 1000.
  2. Измените приоритет равных широт на 750. Это позволит авто Макет для игнорирования или изменения этого ограничения, если это необходимо.
  3. Добавьте ограничение Equal Heights (View - Superview), но вместо Equal сделайте его меньше или равно с множителем 0,9. Оставьте свой приоритет на уровне 1000.

Теперь, когда вы находитесь на портрете, Auto Layout сможет удовлетворить все ваши ограничения, сделав ширину красной коробки равной 90% по-прежнему. Когда вы переключаетесь на ландшафт, ограничение равных высот гарантирует, что красное поле не будет расти больше 90% высоты, так как это ограничение имеет приоритет 1000, но автоматический макет также сделает окно максимально возможным, пытаясь лучше всего использовать ограничение равной ширины.

1

Вы заставили свою ширину обзора и соотношение сторон. Поэтому, когда вы увеличиваете ширину, автовыключение заставит ваш рост вырасти, чтобы сохранить соотношение сторон 1: 1. Вы должны:

  • Установить ограничения для высоты и ширины, чтобы быть <= 0.9* Superview с 1000 приоритетом
  • Установление ограничений для вашей высоты и ширины, чтобы быть == 0.9* Superview с 750 приоритете

Я Бесполезный «т попробовать, но она должна выглядеть лучше;)

+0

Спасибо Квентин. Ваш ответ работает отлично, но это не совсем то, что мне нужно.Я добавил новый скриншот к моему оригинальному вопросу, чтобы визуализировать свою проблему. –

+0

Вы сохранили ограничения 1: 1 (с приоритетом 1000)? Если нет, верните! –

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