Это зависит от ваших требований к дизайну.
layoutMarginsGuide
состояния документации :
Руководство по макету, представляющее поля представления.
Используйте привязки этого руководства по компоновке для создания ограничений с полем представления.
Там, где поля макета - это просто безопасная область вида:
Безопасные области помогут вам разместить ваши представления в видимой части общего интерфейса. Определенные UIKit контроллеры представления могут размещать специальные представления поверх вашего контента. Например, контроллер навигации отображает панель навигации поверх содержимого основного контроллера представления. Даже если такие представления частично прозрачны, они все равно закрывают содержимое, которое находится под ними.
Для self.view
видимая часть общего интерфейса будет исключать области, занятые строкой состояния, панелью навигации, панелью вкладок и т. Д.
Для обычного UIView
заполнение по умолчанию составляет 8px.
Таким образом, если вы хотите, чтобы someView
был ограничен в пределах безопасной области / поля otherView
, тогда вы будете ссылаться на otherView
s layoutMarginsGuide
якоря.
Если нет, то достаточно otherView
якорей.
1. Пример (с layoutMarginsGuide
):
let textField = UILabel()
textField.text = "Using Layout Margins Guide Anchors"
textField.backgroundColor = UIColor.red
textField.translatesAutoresizingMaskIntoConstraints = false
self.view.addSubview(textField)
var constraints = [NSLayoutConstraint]()
//textfield's top edge = self.view's margin's top edge
constraints.append(textField.topAnchor.constraint(equalTo: self.view.layoutMarginsGuide.topAnchor))
//textfield's leading edge = self.view's margin's leading edge
constraints.append(textField.leadingAnchor.constraint(equalTo: self.view.layoutMarginsGuide.leadingAnchor))
//textfield's trailing edge = self.view's margin's trailing edge
constraints.append(textField.trailingAnchor.constraint(equalTo: self.view.layoutMarginsGuide.trailingAnchor))
//Apply the constraints
NSLayoutConstraint.activate(constraints)
Выход:
Замечание:
- Листья 20px от левого / правого края
self.view
- Начинается сразу под строкой состояния
- Если бы у вас была навигационная панель, то она начиналась бы ниже этого
- Это
self.view
безопасная область / поля макета
2. Пример (без layoutMarginsGuide
):
let textField = UILabel()
textField.text = "Without Layout Margins Guide Anchors"
textField.backgroundColor = UIColor.red
textField.translatesAutoresizingMaskIntoConstraints = false
self.view.addSubview(textField)
var constraints = [NSLayoutConstraint]()
//textfield's top edge = self.view's top edge
constraints.append(textField.topAnchor.constraint(equalTo: self.view.topAnchor))
//textfield's leading edge = self.view's leading edge
constraints.append(textField.leadingAnchor.constraint(equalTo: self.view.leadingAnchor))
//textfield's trailing edge = self.view's trailing edge
constraints.append(textField.trailingAnchor.constraint(equalTo: self.view.trailingAnchor))
//Apply the constraints
NSLayoutConstraint.activate(constraints)
Выход:
Замечание:
- Начинается сразу с левого / правого края
self.view
- Начинается сразу с верхнего края
self.view
, который перекрывает строку состояния
- Если бы была навигационная панель, она бы тоже перекрывалась
- Это границы
self.view
Наконец, это зависит от вашего требования.
Иногда вы должны использовать его, иногда вы могли бы использовать его, иногда вам просто не нужно его использовать.
PS: Теперь, независимо от того, используете ли вы его на якорях UIView
или на якорях layoutMarginsGuide
, он будет реагировать на поворот устройства или любые другие изменения макета автоматически.