AutoLayout 约束与frame、bounds的设置

介绍

关于AutoLayout的介绍可参考:
使用解读:
https://segmentfault.com/a/1190000004386278

iOS 屏幕适配,autoResizing autoLayout和sizeClass图文详解
http://www.cnblogs.com/cxbblog/p/4166876.html

AutoLayout使用注意点参考:
https://github.com/smileyborg/UIView-AutoLayout/wiki/Tips-and-Tricks

AutoLayout实现UITableView的Cell动态布局及动态行高必看手册
Using Auto Layout in UITableView for dynamic cell layouts & variable row heights
http://stackoverflow.com/questions/18746929/using-auto-layout-in-uitableview-for-dynamic-cell-layouts-variable-row-heights
http://codingobjc.com/blog/2014/10/15/shi-yong-autolayoutshi-xian-uitableviewde-celldong-tai-bu-ju-he-ke-bian-xing-gao/index.html (中文翻译)

约束与frame、bounds的关系

AutoLayout启用时,约束与手动设置frame方式冲突,不能混合使用,需要更改布局时应该考虑动态修改约束变量,然后触发强制刷新layout
通过约束条件,AutoLayout使用自动布局引擎Cassowary动态计算、维护各个view所需的frame
但bounds属性依然可以手动更改操作
frame表示view本身相对父容器的位置、大小信息
bounds表示view的内容相对view的实际绘制坐标位置,一般为(0, 0)
bounds的尺寸与frame尺寸不一定相等(内容与view尺寸不一定相等)

关于bounds的解释与使用可参考:
如何对使用了autolayout的UIView添加动画
http://www.cocoachina.com/ios/20141010/9869.html

修改约束

频繁的删除、添加约束会导致严重的性能问题
相对于删除再添加新约束,苹果推荐通过修改已有约束的方式实现更新
拥有最高优先级(1000-required)的约束不允许发生冲突,此外的约束不强制必须满足,因此可存在竞争性冲突设置

view.constraints数组包含layout子view所需的所有约束
可通过constraint的firstItem、firstAttribute、secondItem、secondAttribute、constant等属性筛选出需要修改的约束
也可将约束绑定到outlet对象进行修改
约束中只有constant属性允许实时修改

约束修改完毕后,可调用重layout等方式刷新界面布局

  • 在合适的方法内修改约束时,不需要手动刷新布局,如layoutSubviews中或layoutSubviews被调用前。

操作方法可参考:
Auto growing UITextView Using Auto Layout
https://corecocoa.wordpress.com/2013/11/09/auto-growing-uitextview-using-auto-layout/

具备内容动态高度的组件可不设置高度约束(运行时会被隐式指定并实时更改)

关于约束的Placeholder - Remove at build time属性

当XIB的组件缺少最低必要约束条件时(例如View高度),编译时IB系统会自动生成插入一个默认的约束条件用以补全所有约束,每个界面最终必须使用静态绝对布局来定位,部分尺寸可变组件需要动态相对布局时,在运行时通过组件内部代码或手工代码进行约束值的动态更改、重新layout。
当不希望系统自动追加约束条件时,可在XIB中设定一个临时约束,指定Remove at build time,则在编译期间对该约束进行忽略,并不再追加缺少的约束,此时需要在代码中手动添加所缺的约束条件。
同一组件中存在重复类型(并且优先级相同??)的约束时将抛出异常(除非标记为deactivate)。

关于Remove at build time以及Uninstalled constraint与Placeholder constraint的区别,可参考:
http://stackoverflow.com/questions/19015215/trouble-with-autolayout-on-uitableviewcell

转载于:https://www.cnblogs.com/wavky/p/5722853.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值