在阅读Apple文档时,我发现了对自动调整,AutoLayout和约束的引用.在代码中使用所有这些有什么区别?在iOS 9中以编程方式应用这些技术的正确方法是什么?
Vin*_*ath 47
这里真的只有两件事:
自动化基本上是Apple为了使开发人员能够构建动态布局而引入的旧方式的总称.这里要解决的第一个用例是屏幕旋转.由于当屏幕旋转(或以其他方式调整大小)时,屏幕中的子视图很可能frame在新尺寸的超视图中保持不正确(位置和大小).为了解决这个问题,Apple引入了一系列可枚举的属性(称为Autoresizing Masks),告诉superview以特定方式处理子视图.其中包括:
灵活的宽度/高度,使子视图扩展到可用的最大宽度/高度
灵活的前导/尾随/顶部/底部空间,允许特定边缘可变,等等.
视图可以包含这些enum属性的任意组合.
这是不充分的,因为除了其他缺点之外,它没有规定关于如何在其他兄弟观点方面布置视图(如果这是动词)的规则.它还需要大量额外的编码来手动调整方向更改的视图.
这是AutoLayout进入图片的地方.Apple构建了一个框架,该框架基于constraints- 可以应用于视图和视图之间的规则,这将决定视图在可变屏幕大小中的大小.这些约束在一个名为的类中构造,并且该类的NSLayoutConstraint每个实例(约束)都具有以下重要属性:
constant约束的值(或):有趣的是,实例化后可以更改的约束的唯一属性.一个简单的例子NSLayoutConstraint说明:视图的宽度将是其超视图宽度的一半乘以60%.
您的基于AutoLayout的UI将包含许多此类约束,这些约束将共同表达一个明确且不冲突的UI布局.
现在,AutoLayout引擎使其全部工作,与屏幕上的视图交互,调用AutoLayout消息,例如layoutSubviews在需要时自动调整大小(布局)视图,无论何时在屏幕上发生更改,例如方向更改,超级视图调整大小等.
约束最常由InterfaceBuilder(.xib和.storyboard文件)添加,但是按代码添加它们需要相同的原则:创建一个实例NSLayoutConstraint并将其添加到适用的最高视图中(例如,如果孩子之间存在约束)在父视图中,应该将约束添加到父视图中.如果两个子视图之间存在约束,请再次将其添加到父视图中.)
Apple的AutoLayout指南,API文档和AutoLayout上的介绍性WWDC视频非常出色,这些都是了解更多信息的最佳地点.
| 归档时间: |
|
| 查看次数: |
10965 次 |
| 最近记录: |