通过布局锚点自动布局

通过视觉格式语言添加约束非常容易和有趣。 但是一旦我们有了复杂的观点,这将成为一项艰巨的任务。 如果事情没有按预期进行并且需要调试约束,则将变得更加困难。 或者,如果视图是由其他人创建的,并且您需要在一个已经有很多标签及其对应的文本字段的大表格中的另一个文本字段中滑动。

营救布置锚点

布局锚是Apple在iOS 9中引入的一种机制。这是一种添加可读性和简洁性的约束的全新方法。

根据类的定义:

NSLayoutAnchor:

一个工厂类,用于使用流畅的API创建布局约束对象。 使用这些约束可以通过“自动布局”以编程方式定义布局。 与其直接创建NSLayoutConstraint对象,不如从要约束的UIView,NSView或UILayoutGuide对象开始,然后选择该对象的锚点属性之一。

布局锚是在UIView,NSView或UILayoutGuide上定义的属性。 在本文中,我们将集中讨论UIView上定义的Layout Anchor属性。

在UIView上总共定义了12个Layout Anchor属性。 它们可以分为三种类型。 水平垂直尺寸 。 从NSLayoutAnchor类派生的每种类型对应三个独立的类。 NSLayoutXAxisAnchorNSLayoutYAxisAnchorNSLayoutDimension

水平布局锚

这些是锚属性,用于添加水平约束或沿视图X轴的约束。 这些是NSLayoutXAxisAnchor类的实例。 这些包含以下锚点:

  1. 领先的锚
  2. 尾锚
  3. 左锚
  4. 右锚
  5. Center-X锚

在这里,所有约束都是不言自明的。 值得指出的一个区别是,前导锚和尾锚是动态的,并且可能会根据语言环境的方向而变化。 也就是说,对于LTR(从左到右)语言,它们将从左到右,对于RTL语言,则将从右到左。 相反,无论如何,左右锚点始终保持左右。

垂直布局锚

这些是锚属性,用于沿视图的Y轴添加约束。 NSlayoutYAxisAnchor类的实例,这些属性包含以下锚点:

  1. 顶锚
  2. 底部锚
  3. 中心Y型锚
  4. 第一基准锚
  5. 最后基准锚

在此,第一基线是多行标签中第一行文本的基线。 同样,最后基线是多行标签中文本最后一行的基线。 如果文本为单行,则它们将相同。

尺寸布局锚

这些定位点定义视图的大小。 它们是NSLayoutDimension类的实例。 其中包含以下锚点:

  1. 宽度锚
  2. 高度锚

顾名思义,它们定义了宽度和高度约束。

通过布局锚添加约束

示例1:将视图添加到超级视图

示例2:在超级视图的中心添加一个视图

示例3:简单形式

注意事项

  1. 默认情况下,通过布局锚定API返回的约束是不活动的。 您需要激活该约束以使其起作用。 忘记这一点可能会导致意外的布局。
  2. NSLayoutAnchor API使相对容易地以编程方式应用约束。 但是,InterfaceBuilder别无选择。 布局锚使生活稍微容易一些,但是当涉及到复杂的视图时,请始终尝试使它们在IB中。

VFL与布局锚点

为了检查哪种添加约束的方法更容易,我在VFL和布局锚点中都创建了一个棋盘。 下面是两者的代码示例,供您比较。

布局锚中的约束:

VFL中的约束

结论

NSLayoutAnchor是通过编程添加约束的新方法。 它易于记忆且编码迅速。 但是,当视图变得复杂时,它会遇到复杂且难以理解的代码的问题。 因此,InterfaceBuilder仍然是布局视图的首选方法。


下载示例项目

ihak / LayoutAnchor

NSLayoutAnchor的演示项目。

github.com


呼吁采取行动

如果您喜欢这个矿,请mine尽您所能。 分享它,以帮助其他人找到它。 或者,您可以在下面评论以获取建议和改进。