Как настроить различные ограничения автоматической компоновки для разных размеров экрана
У меня есть 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]()