В iOS, какая разница между авторезистированием, AutoLayout и ограничениями?

При чтении документации Apple я нахожу ссылки на авторезистор, AutoLayout и ограничения. Какая разница между использованием всех этих элементов в коде? Каков правильный способ применения этих методов программно в iOS 9?

Ответы

Ответ 1

Здесь действительно две вещи:

  • автоматического изменения
  • AutoLayout

Авторезизация - это, в основном, коллективный термин для старого способа, который Apple представила, чтобы разработчики могли создавать динамические макеты. Номер номер usecase для адреса здесь был поворот экрана. Поскольку, когда экран будет повернут (или иным образом изменен), подвиды на экране скорее всего будут содержать неправильный frame (положение и размер) в новом размере супервизора. Чтобы решить эту проблему, Apple представила серию перечислимых свойств (называемых Autoresizing Masks), которые показывают, что супервизор обрабатывает subview определенным образом. Среди них:

  • Гибкая ширина/высота, что приводит к тому, что subview расширяется до самой доступной ширины/высоты

  • Гибкое ведущее/трейлинг/верхнее/нижнее пространство, которое допускает переменную переменную и т.д.

В представлении может содержаться любая комбинация этих свойств enum.

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

Здесь, где AutoLayout вошел в изображение. Apple построила фреймворк, который работал на основе constraints - правил, которые могут применяться к представлениям и представлениям, которые определяли бы, как размер представления будет иметь размер экрана. Эти ограничения структурированы в классе с именем NSLayoutConstraint, и каждый экземпляр (ограничение) этого класса имеет следующие важные свойства:

  • Элемент (вид), на который применяется ограничение
  • Свойство представления (высота, ширина, передний край, задний фронт и т.д.), что ограничение применимо к
  • Второй элемент (дочерний или дочерний или родительский вид), с которым связано ограничение.
  • Второй атрибут элемента
  • Умножитель на ограничении: полезно для указания ограничений на основе отношения.
  • Значение (или constant) ограничения: интересно, единственное свойство ограничения, которое может быть изменено после создания экземпляра.

Простой пример NSLayoutConstraint, заявленный прозаично: ширина представления будет в два раза меньше ширины его надзора, умноженной на 60%.

Пользовательский интерфейс, основанный на AutoLayout, будет состоять из многих таких ограничений, которые будут работать вместе, чтобы выразить однозначный и неконфликтный макет пользовательского интерфейса.

Теперь механизм AutoLayout, который заставляет его работать, взаимодействует с представлениями на экране, вызывая сообщения AutoLayout, такие как layoutSubviews, когда это необходимо, чтобы автоматически изменять размер (макет), когда происходят изменения на экране, такие как изменение ориентации, изменение профиля и т.д.

Ограничения чаще всего добавляются в файлы InterfaceBuilder (файлы .xib и .storyboard), но добавление их по коду влечет за собой тот же принцип: создайте экземпляр NSLayoutConstraint и добавьте его к самому высокому виду (например, if существует ограничение между дочерним и родительским представлениями, ограничение должно быть добавлено к родительскому представлению. Если есть ограничение между двумя подзонами, снова добавьте его в родительский.)

Apple Руководство по AutoLayout, Документация по API и вводная видео WWDC в AutoLayout превосходны, и это были бы лучшие места, чтобы узнать больше.