Xcode 8: Могу ли я использовать ограничения и автоматическое изменение размеров как в одном представлении?
3 ответа
Вы могли бы, но вы не должны
Вы можете использовать ограничения для некоторых представлений и автоматическое изменение размеров для других, но будьте осторожны, чтобы не смешивать их в одном представлении, так как это вызовет проблемы (информация об изменении размера будет потеряна).
iOS заботится об автоматическом изменении размеров, создавая ограничения, которые передают информацию об автоматическом изменении в механизм ограничений. Это поведение может быть включено или отключено с помощью метко названного свойства translatesAutoresizingMaskIntoConstraints.
Вы можете попытаться добавить ограничения к представлению и при этом автоматически изменить его размер со старым поведением, установив для этого значения значение true
, но я предлагаю вам использовать ограничения для каждого представления, так как оно может делать все, что может делать авторазмер, и многое другое.
Да, вы можете (использовать смесь ограничений и автоматическое изменение размера для подпредставлений в одном представлении) в Xcode 8. Увидеть:
02:38 https://developer.apple.com/videos/play/wwdc2016/236/
С Xcode 8, translatesAutoresizingMaskIntoConstraints
Свойство для каждого представления автоматически поддерживается Интерфейсным Разработчиком:
- По умолчанию при первом добавлении дочернего представления значение свойства равно true.
- Когда первое ограничение добавляется в дочернее представление, значение автоматически устанавливается равным false, а панель инспектора размера изменяется на представление " Ограничения".
- Когда последнее ограничение удаляется из дочернего представления, значение свойства автоматически возвращается к значению true, а инспектор размера возвращается к представлению с автоматическим изменением размера.
- Если вы создадите представление программно, Xcode сгенерирует
constraints
удовлетворитьautoresizing
сам (translatesAutoresizingMaskIntoConstraints
установлен вtrue
). Однако, если вы создаете представление в IB, Apple говорит:
Если вы добавляете представления в Interface Builder, система автоматически устанавливает для этого свойства значение false.
- Чтобы отразить это, любое представление, добавленное в IB до Xcode 8, имеет
autoresizing
вариант спрятан (по крайней мере, я его там некоторое время не видел).
Но вот в чем дело:
- Начиная с Xcode 8, опция видна (
translatesAutoresizingMaskIntoConstraints
установлен вtrue
до тех пор, пока вы не добавите какие-либо ограничения, поэтому, я думаю, вышеприведенный текст Apple не является правильным.
Таким образом, в одном представлении вы не можете удовлетворить / использовать оба. просмотр (авторазмер и ограничения)
В подпредставлениях вы можете использовать разные для каждого, но это будет беспорядок, и я не могу себе представить разумное использование. view-> subview(ограничения) и subview(авторазмер)
Это также означает, что вы можете использовать, например, view(autoresizing)->subview(ограничения)