我是iOS开发的新手,我对对齐有疑问。当我想使视图水平居中时,我发现有两种方法(我错了吗?) 1.)大小检查器->排列(位置视图,我选择水平居中 在容器中) 或
2。)对齐约束->在容器中水平放置
A)这两种方法有什么区别? B)当我想使一个视图居中时,应该实现哪个视图还是应该同时实现两个视图?
答案 0 :(得分:2)
这里实际上只有两件事:
自动调整大小(大小检查器->排列(位置视图,我选择在容器中水平居中)
AutoLayout (对齐约束->在容器中水平放置)
自动调整大小基本上是Apple为使开发人员能够构建动态布局而引入的旧方法的统称。屏幕旋转是这里要解决的第一个用例。因为当屏幕旋转(或调整大小)时,屏幕中的子视图很可能在新调整大小的超级视图中保留不正确的帧(位置和大小)。为了解决这个问题,Apple引入了一系列可枚举的属性(称为“自动调整大小蒙版”),这些属性告诉超级视图以特定方式对待子视图。其中包括:
宽度/高度灵活,可将子视图扩展到可用的最大宽度/高度
灵活的前导/尾随/顶部/底部空间,它允许特定的边可变,依此类推。
视图可以包含这些枚举属性的任意组合。
这是不充分的,因为除其他缺陷外,它没有规定关于相对于其同级视图如何布局视图(如果是动词)的规则。它还需要大量额外的编码来手动调整方向更改时的视图大小。
这是AutoLayout输入图片的地方。苹果公司建立了一个基于约束的框架-可以应用于视图以及视图之间的规则,这些规则将确定如何在可变的屏幕尺寸下调整视图的大小。这些约束在名为NSLayoutConstraint的类中进行构造,该类的每个实例(约束)具有以下重要属性:
对其施加约束的项目(视图) 约束适用于的视图属性(高度,宽度,前缘,后缘等) 与约束相关的第二项(同级,子级或父级视图) 第二项的属性 约束乘数:用于指定基于比率的约束 约束的值(或常数):有趣的是,约束的唯一属性可以在实例化后更改。 概括地说,一个NSLayoutConstraint的简单示例是:视图的宽度将是其父视图的宽度的一半乘以60%。
基于AutoLayout的UI将由许多此类约束组成,这些约束将共同发挥作用,以表达明确且无冲突的UI布局。
现在,使这一切正常工作的AutoLayout引擎与屏幕上的视图进行交互,并在需要时调用AutoLayout消息(例如layoutSubviews),以便在屏幕上发生更改(例如方向更改,超级视图)时自动调整视图的大小(布局)调整大小等。
约束通常是由InterfaceBuilder添加的(.xib和.storyboard文件),但是通过代码添加约束的原理相同:创建一个NSLayoutConstraint实例,并将其添加到适用的最高视图中(例如,如果存在子视图和父视图之间的约束,应将该约束添加到父视图。如果两个子视图之间存在约束,请再次将其添加到父视图。)
B: 您应该实现 AutoLayout 。 无需同时实现。
答案 1 :(得分:0)
是的,您可以同时使用两种方法,我建议您使用的方法是:
首先将其以X为中心放置在超级视图中,将底部空间0放置在底部布局指南中。它可能是这样的:
双击底部空间,然后将视图底部更改为中心Y:
如果您不使用自动版式,则只需一行代码:
childView.center = parentView.center
如果您使用的是自动版式,则可以将子视图的内部居中放置,如下所示:
childView.centerXAnchor.constraint(equalTo: parentView.centerXAnchor).isActive = true
childView.centerYAnchor.constraint(equalTo: parentView.centerYAnchor).isActive = true
这些约束将随着可用空间的变化而自动更新。
从iOS 3.2起可用