来自Leo的原创博客,转载请著名出处
我的StackOverflow
前言
AutoLayout用来布局已经不是什么新鲜事了,我之前也写过三篇入门的文章
当然,实际开发中,如果是多人协同开发,基本上是弃用Storyboard和XIB文件的。因为这两种文件本质上是XML,多人协同开发一起修改这样的大XML是一件很蛋疼的事情。
所以,大部分时候,Layout约束都是纯代码实现的。
除非某些公司要实现自己的Layout引擎。否则,更多的还是使用第三方库
使用Masonry能够让约束创建变得很容易。但是,为了更好的利用AutoLayout,很多约束相关的基础知识要了解,这样能够帮助你实现更复杂更灵活的布局。
约束优先级
NSLayoutConstraint有个属性是priority,类型是UILayoutPriority,本质上其实是float类型
typealias UILayoutPriority = Float
可以去取如下值,当然也可以直接设置float值
enum {
UILayoutPriorityRequired = 1000,
UILayoutPriorityDefaultHigh = 750,
UILayoutPriorityDefaultLow = 250,
UILayoutPriorityFittingSizeLevel = 50,
};
typedef float UILayoutPriority;
用处:当两个约束发生冲突的时候,会break优先级低的约束
举个例子先,
例如,我希望有这样的一个View
- 水平垂直居中
- 宽度320,高度200
- 距离左右的最小间隔大于等于20(为了适配小屏幕)
这时候,添加的约束如下
然后,我们看看预览
在4s上,预览是不正确的,但是在大屏上,一切正常
如果这时候运行4s模拟器,会发现Log
2016-06-03 23:01:40.339 OCTest[1004:26277] Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want.
Try this:
(1) look at each constraint and try to figure out which you don't expect;
(2) find the code that added the unwanted constraint or constraints and fix it.
(

本文深入探讨AutoLayout的高级用法,包括约束优先级、内在大小(Intrinsic Size)、Hugging Priority和Compression Resistance Priority的原理与应用,并通过实例展示了systemLayoutSizeFittingSize方法在计算视图最适大小中的作用。对于iOS开发者来说,理解这些概念能提升布局的灵活性和效率。

最低0.47元/天 解锁文章
207

被折叠的 条评论
为什么被折叠?



