这取决于您的设计要求。
layoutMarginsGuide
文档状态:
表示视图边距的布局指南。使用此布局指南的锚点创建具有视图边距的约束。
布局边距基本上只是视图的安全区域:
安全区域可帮助您将视图放置在整个界面的可见部分中。UIKit 定义的视图控制器可能会将特殊视图放置在您的内容之上。例如,导航控制器在底层视图控制器的内容之上显示一个导航栏。即使这些视图是部分透明的,它们仍然会遮挡其下方的内容。
对于self.view
,整个界面的可见部分会排除状态栏、导航栏、标签栏等占据的区域。
对于普通UIView
的 ,默认填充为 8px。
所以基本上,如果你想someView
被限制在 的安全区域/边距内otherView
,那么你将引用otherView
的layoutMarginsGuide
锚点。
如果没有,那么只需otherView
's 锚就足够了。
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)
输出:

观察:
self.view
从的左/右边缘离开 20px
- 在状态栏下方立即开始
- 这些是
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
锚点,它都会自动响应设备旋转或任何其他布局变化。