在 Xcode 中,视图的 'final' 是什么?:对齐矩形,或视图的框架

In Xcode, which has the 'final' say of a view?: Alignment rectangle, or the view's frame

我对视图的对齐矩形 属性 和同一视图的框架 属性.

之间的关系仍然有些模糊

我知道作为开发人员,我们不能直接在代码中更改对齐矩形 属性,我们可以通过界面生成器中的约束来操纵它。我也知道(或者我认为我知道)对齐矩形 属性 比 CGRect 有更多的值,即顶部、左侧、右侧、底部、前导、尾随、基线等...

我不明白这两者如何在一个视图中协同工作。

当您查看一个有约束的视图时,比如 UILabel,原始的 CGRect 框架 属性 是否还在使用?或者对齐矩形 属性 接管了该视图(使其响应并在运行时计算 width/height/origin 位置)?

这本书建议很少使用其框架是一个简单的 CGRect 对象的视图,该对象具有 x 和 y 原点和固定 width/height,而是使用与视图对齐有关的约束矩形 属性.

所以基本上.. 我有一个标签,您已经对其施加了约束,框架现在是 'responsive',视图的框架 属性 是否仍在使用?如果是,如何以及为什么?

谢谢

视图的框架低于自动布局。 frame存放的是view占据的矩形;而已。在绘制视图、处理触摸等时,UIKit 使用视图的框架。 frame是view当前的位置和大小;没有别的了。

自动布局设置视图的框架。如果您使用自动布局为视图指定约束,自动布局将计算视图应基于的框架,并在 运行 时将该框架设置为 frame 属性。

layoutSubviews() of UIView, which runs when the view is added as a subview or its size is changed 运行 自动布局。您可以自己设置 frame,但它会在下次 layoutSubviews() 运行 时被自动布局重置。