uikit——Auto Layout——NSLayoutAnchor
来源:互联网 发布:淘宝买黄金项链可靠吗 编辑:程序博客网 时间:2024/06/02 01:16
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,因此语法允许,但auto layout逻辑上不允许,这会导致runtime crash
千万别直接使用NSLayoutAnchor,根据constraint生成类型使用合适concrete subclass:
- NSLayoutXAxisAnchor:生成horizontal constraint
- NSLayoutYAxisAnchor:生成vertical constraint
- NSLayoutDimension:生成size constraint
注:view anchor属性自动提供了正确的concrete subclass,但view并没有直接提供margin anchor属性,需通过view layoutMarginsGuide访问margin anchor属性
NSLayoutAnchor接口:
/* These methods return an inactive constraint of the form thisAnchor = otherAnchor. */- (NSLayoutConstraint *)constraintEqualToAnchor:(NSLayoutAnchor<AnchorType> *)anchor;- (NSLayoutConstraint *)constraintGreaterThanOrEqualToAnchor:(NSLayoutAnchor<AnchorType> *)anchor;- (NSLayoutConstraint *)constraintLessThanOrEqualToAnchor:(NSLayoutAnchor<AnchorType> *)anchor;/* These methods return an inactive constraint of the form thisAnchor = otherAnchor + constant. */- (NSLayoutConstraint *)constraintEqualToAnchor:(NSLayoutAnchor<AnchorType> *)anchor constant:(CGFloat)c;- (NSLayoutConstraint *)constraintGreaterThanOrEqualToAnchor:(NSLayoutAnchor<AnchorType> *)anchor constant:(CGFloat)c;- (NSLayoutConstraint *)constraintLessThanOrEqualToAnchor:(NSLayoutAnchor<AnchorType> *)anchor constant:(CGFloat)c;
NSLayoutAnchor生成以下relationship constraint:
- anchor1 = anchor2
- anchor1 >= anchor2
- anchor1 <= anchor2
- anchor1 = anchor2 + c
- anchor1 >= anchor2 + c
- anchor1 <= anchor2 + c
注:constant不允许直接赋值给anchor
NSLayoutXAxisAnchor
NSLayoutXAxisAnchor是NSLayoutAnchor concrete subclass,对NSLayoutAnchor接口进行了具体实现,增加了类型检查功能,传入参数必须是NSLayoutXAxisAnchor类型,无新增接口
NSLayoutYAxisAnchor
NSLayoutYAxisAnchor是NSLayoutAnchor的concrete subclass,对NSLayoutAnchor接口进行了具体实现,增加了类型检查功能,传入参数必须是NSLayoutYAxisAnchor类型,无新增接口
NSLayoutDimension
NSLayoutDimension是NSLayoutAnchor的concrete subclass,对NSLayoutAnchor接口进行了具体实现,增加了类型检查功能,传入参数必须是NSLayoutDimension类型,并新增了接口
NSLayoutDimension新增接口:
/* These methods return an inactive constraint of the form thisVariable = constant.*/- (NSLayoutConstraint *)constraintEqualToConstant:(CGFloat)c;- (NSLayoutConstraint *)constraintGreaterThanOrEqualToConstant:(CGFloat)c;- (NSLayoutConstraint *)constraintLessThanOrEqualToConstant:(CGFloat)c;/* These methods return an inactive constraint of the form thisAnchor = otherAnchor * multiplier.*/- (NSLayoutConstraint *)constraintEqualToAnchor:(NSLayoutDimension *)anchor multiplier:(CGFloat)m;- (NSLayoutConstraint *)constraintGreaterThanOrEqualToAnchor:(NSLayoutDimension *)anchor multiplier:(CGFloat)m;- (NSLayoutConstraint *)constraintLessThanOrEqualToAnchor:(NSLayoutDimension *)anchor multiplier:(CGFloat)m;/* These methods return an inactive constraint of the form thisAnchor = otherAnchor * multiplier + constant.*/- (NSLayoutConstraint *)constraintEqualToAnchor:(NSLayoutDimension *)anchor multiplier:(CGFloat)m constant:(CGFloat)c;- (NSLayoutConstraint *)constraintGreaterThanOrEqualToAnchor:(NSLayoutDimension *)anchor multiplier:(CGFloat)m constant:(CGFloat)c;- (NSLayoutConstraint *)constraintLessThanOrEqualToAnchor:(NSLayoutDimension *)anchor multiplier:(CGFloat)m constant:(CGFloat)c;
NSLayoutDimension新增接口生成以下relationship constraint:
- anchor1 = c
- anchor1 >= c
- anchor1 <= c
- anchor1 = m * anchor2
- anchor1 >= m * anchor2
- anchor1 <= m * anchor2
- anchor1 = m * anchor2 + c
- anchor1 >= m * anchor2 + c
- anchor1 <= m * anchor2 + c
注:NSLayoutDimension新增relationship只能表示两个UI对象size relationship,constant允许直接赋值给anchor
阅读全文
0 0
- uikit——Auto Layout——NSLayoutAnchor
- uikit——Auto Layout——layout margin
- uikit——Auto Layout——constraint
- uikit——Auto Layout——intrinsic content size
- uikit——Auto Layout——Readable Content Guide
- uikit——Auto Layout——Semantic Content
- uikit——Auto Layout——NSLayoutConstraint
- uikit——Auto Layout——UILayoutGuide
- Auto Layout(NSLayoutAnchor)
- uikit——Auto Layout——UIView——layout guide
- uikit——Auto Layout——Top&Bottom Layout Guide
- cocoa touch——NSLayoutAnchor
- uikit——Auto Layout——UIView——constraint
- uikit——Auto Layout——UIView——anchor
- uikit——Auto Layout——UIView——margin
- Auto Layout— 实现等分
- uikit——UIView——layout
- uikit——Layout——概述
- *单例集合、泛型
- MySQL安装文件分为两种,一种是msi格式的,一种是zip格式的
- 数组先小于等于再大于等于的调整
- HDU-2546-饭卡(01背包)
- 按键驱动(一)-中断
- uikit——Auto Layout——NSLayoutAnchor
- Git学习之本地分支和远程分支关联
- C
- 数据字典依赖easyui onShowPanel 版本
- 在数组中找到第 k 小的数
- uikit——Auto Layout——UIView——anchor
- 四大组件之service
- 各种mysql版本下载
- HDFS常用命令