Auto Layout

来看看Auto Layout。

我们都知道的,Auto Layout可以描述视图与其内容相互之间的关系,也可以描述视图视图及其内容与父视图之间的关系。
那,Auto Layout 的工作原理是通过创建屏幕上的对象之间的关系来实现布局。
使用Auto Layout ,可以描述一些约束,用来指定视图之间的关系;也可以设置一些视图属性,用来描述视图与其内容之间的关系。
1>内容驱动的布局
Auto Layout是内容驱动的。它在布局时会考虑视图的内容
2>优先级规则
Auto Layout 通过优先级规则权衡各布局选项的重要性,并对优先级作适当调整,使之适合有挑战性的边界条件和特殊情况。当规则发生冲突时,系统根据优先级排序选择最重要的布局质量来保护。
3>检查和模块化
Auto Layout可以有效地进行集中处理和检查。只有当使用代码创建布局时才能利用这一优势。
使用代码创建布局,可以将规则划分为一些通用方法(如loadView和updateViewConstraints)并自由地对这些方法进行注释。
将约束进行模块化是一件很简单的事,当创建了将一个视图相对于其父视图居中的例程后,就可以无限地重用该例程。

视图丢失?
1、欠约束导致丢失视图
欠约束的视图没有为Auto Layout提供构建视图所需的足够信息,因此它通常默认大小为0.
2、规则不一致导致丢失视图
两个视图相互之间的约束规则不一致时,这种规则既可以实现,也无歧义,这是因为视图的宽度为0时,可满足。所以丢失。

追踪丢失的视图:
在预期他们出现之后检查他们的几何形状(例如使用viewDidAppear:和awakeFromNib),可以添加NSAssert语句来描述他们的预期大小和位置。

有歧义的布局
在开发过程中,可以调用hasAmbiguousLayout来测试视图的约束是否充分。如果某个视图可能显示另一种不同的框架,则返回YES;如果某个视图的约束已充分指定,则返回NO.这些结果是每个视图所特有的。应该为你的视图层次结构中的每个视图单独地测试布局。

内在内容大小
使用Auto Layout时,视图的内容在其布局中的重要性与约束不相上下。视图内容的大小通过每个视图的intrinsicContentSize属性表达,它描述了在数据未经压缩或裁剪的情况下表达视图全部内容所需的最小空间。该属性源于每个视图所呈现内容的自然属性。
通过视图的内在内容大小,Auto Layout将视图的框架尽可能地与其自然内容相匹配。

压缩阻力
压缩阻力是指视图保护其内容的方式,压缩阻力高的视图能够抵抗收缩,不允许内容被剪切。setContentCompressionResistancePriority

内容吸附
内容吸附优先级是防止在视图与其核心内容间作填充或直接伸展其核心内容.
setContentHuggingPriority

你可能感兴趣的:(Auto Layout)