Как настроить различные ограничения автоматической компоновки для разных размеров экрана

У меня есть tableView со статическими ячейками. Ячейка содержит ImageView, который полностью ее заполняет. И у меня есть еще один меньший ImageViews на вершине. Я позиционирую этот ImageViews с ограничениями. У меня есть вопрос об изменении размеров ограничений. Как я могу установить разные константы ограничения для разных размеров устройств без программирования циклов if/else. Есть ли способ установить его в раскадровке? У меня есть ведущее ограничение для родительского макета, например, с постоянным значением 10. Это нормально для экрана iPhone 5, но на экране iPhone 6/6 плюс оно должно быть больше 10.

iPhone5 Autolayout

Screen Shot

iPhone6 Autolayout

Screen shot

Ответы

Ответ 1

Наконец, я нашел решение, которое работает в моем случае.

  • Я положил прозрачный вид и добавил Align Center X/Y в Superview (фоновое изображение) с необходимым смещением в том виде, который он подходит для моего фрейма для плакатов (на фоновом изображении) - Ограничения для прозрачного представления
  • Затем я прикрепляю Equal width/height к моему Superview (фоновому изображению) для этого прозрачного представления и изменяю мультипликатор в равной ширине (вручную я выбрал 0,61)
  • После этого я приземлился на своем 1 плакате. Я также центрировал как по вертикали, так и по горизонтали со смещением и использовал этот набор ограничений - Пропорциональную ширину для Superview, Соотношение сторон.
  • И последний я разместил свой второй плакат с этими ограничениями. Ведущее пространство для Poster1, выровняйте CenterY на Poster1 (со смещением в моем случае) и Equal width/height. Ограничения для плаката 1/2

В результате у меня действительно адаптивный Autolayout, который почти отлично работает на iPhone 5-6-6 +

Ответ 2

Очень легко. Вы можете изменять значения констант для классов разности в Storyboard. Я даю вам несколько шагов, после чего вы сможете это понять.

Сначала мы создаем константы, как вы можете видеть на этом представлении введите описание изображения здесь

Затем мы выбираем константу, которую хотим изменить в других классах. введите описание изображения здесь

Теперь идет сложная часть. В инспекторе атрибутов после выбора константы вы можете увидеть значение константы. Рядом с вами вы можете увидеть знак PLUS (+), слева от "константы". введите описание изображения здесь

Нажмите на него и выберите нужный класс. Здесь я выбрал Regular Height Regular Width i.e для размеров iPad. введите описание изображения здесь

Затем мы дадим ему новое значение. Таким образом, константа, которая обычно имеет значение 61, будет функционировать как 10 при визуализации в классе размеров классов размера iPad. введите описание изображения здесь

Вот результат - iPhone 4 - введите описание изображения здесь

iPad Air - введите описание изображения здесь

Как вы можете видеть, те же константы имеют разное значение во время выполнения, соответствующее разным классам.

Надеюсь, мое объяснение помогло вам.

Ответ 3

Без написания ни одной строки кода!

Однажды мой младший разработчик задал мне тот же вопрос: как я могу различить iPhoneSE и iPhone6 для какого-то ограничения, в то время было только одно решение, которое писало что-то вроде

if device == iPhoneSE { 
   constant = 44 
} else if device == iPhone6 {
   constant = 52
}

Чтобы преодолеть эту проблему, я создал библиотеку Layout Helper, чтобы теперь вы могли обновлять ограничения для каждого устройства без написания одной строки кода.

Шаг 1

Назначьте NSLayoutHelper для вашего ограничения

enter image description here

Шаг 2

Обновите ограничение для устройства, которое вы хотите

enter image description here

Шаг 3

Запустите приложение и увидите ВОЛШЕБСТВО

enter image description here

Ответ 4

Простой способ!

Чтобы преодолеть эту проблему, я создал небольшую библиотеку, поэтому вам не нужно писать ни одной строки кода, просто назначьте класс (NSLayoutHelper) вашему ограничению, и вы сможете по-разному обновлять ограничение для всех устройств.

enter image description here

Для обновления ограничений

enter image description here

Выход

enter image description here