NSLayoutAnchor
anchor,即锚,是对UI对象attribute(NSLayoutAttribute)的封装,因此用anchor生成constraint,本质等同用NSLayoutConstraint生成constraint
anchor以factory设计模式实现,NSLayoutAnchor为虚父类
NSLayoutAnchor concrete subclass包括:
- NSLayoutXAxisAnchor:x-axis attribute
- NSLayoutYAxisAnchor:y-axis attribute
- NSLayoutDimension:size attribute
显然两个anchor必须是同一concrete subclass才能生成valid constraint
NSLayoutAnchor生成constraint相较于直接使用NSLayoutConstraint生成constraint有以下优点:
- 代码更加简洁,简明,易读
- NSLayoutAnchor concrete subclass增加类型检查,防止生成invalid constraint
注:尽管NSLayoutAnchor相关concrete subclass增加类型检查,它仅仅是确保使用同一concrete subclass生成constraint,但仍然会生成invalid constraint,比如使用leadingAnchor和leftAnchor生成constraint,因为leadingAnchor和leftAnchor都为NSLayoutXAxisAnchor,因此