设置约束与设置 UIViews 框架的优点

Posted

技术标签:

【中文标题】设置约束与设置 UIViews 框架的优点【英文标题】:Advantages of setting Constraints vs Setting Frames of UIViews 【发布时间】:2015-04-15 15:24:33 【问题描述】:

设置约束与简单地设置 UIView 的框架相比有什么优势?基于 UIScreen.MainScreen.Bounds 或 View.Bounds 不能简单地设置框架的约束可以做什么?

【问题讨论】:

您应该观看 2012 年 WWDC 的自动布局视频(其中有 3 个)。使用自动布局可以做很多事情,如果设置框架,这些事情会很困难并且需要大量代码。 谢谢你的建议,我一定会的。 【参考方案1】:

设置框架并不能保证在框架更改(通过旋转)时调整大小。自动布局通过根据框架和相对大小调整视图来保证这一点。您很可能会在多方向应用程序中使用自动布局。

【讨论】:

当您说多方向时,您是指使用横向和纵向的应用程序吗?例如,与纵向与倒置相反? 是的。纵向和倒置不需要换帧。 我不相信你的回答。无论如何,我总是在 layoutSubviews 或 viewWillLayoutSubviews 中编写我的框架代码,并将所有计算写成与其他所有内容的关系。所以方向变化,文本大小变化,都可以很好地表现出来,而无需使用单一的约束。也比约束更容易阅读。【参考方案2】:

设置约束意味着您不再需要考虑框架。您不再需要考虑计算间距和将项目放在一起,也不必考虑在不同屏幕上调整大小。

您真正需要考虑的是,您希望如何将视图放置在彼此之间或与屏幕相关的位置。这大大简化了 UI 代码,因为它消除了所有程序布局。

简单地说,AutoLayout 是在屏幕上放置视图并让一切正常工作的最佳方式。它应该在大多数情况下使用。

【讨论】:

【参考方案3】:

使用自动布局约束,我永远不必担心设置框架或处理多种屏幕尺寸的框架(运行 ios 8 的 iPhone 有 4 种不同尺寸)。

自动布局的好处

根据不同的屏幕尺寸自动调整 自动调整横向到纵向(反之亦然)的方向变化

【讨论】:

说你有 4 个标签,从上到下,你将如何使用自动布局定位这些标签。我的意思是你有 3 种约束:第一个标签和视图顶部,2 个标签之间,最后一个标签和视图底部。我将如何指定这些约束,以便它不会过多地拉伸它们之间的空间,也不会拉伸标签本身的高度?我会给出基于百分比的空间/距离/高度还是只是固定数量(对于 iPhone5、6、plus、iPad mini、iPad Air、iPad Pro 不同)

以上是关于设置约束与设置 UIViews 框架的优点的主要内容,如果未能解决你的问题,请参考以下文章

如何为具有约束的 UIView 设置动画?

如何获取已通过 snapkit 设置的 UIView 的框架

如何为运行时计算的变量高度设置布局约束?

UIScrollView 和 UIView 的约束

使用自动布局对齐两个 uiviews

当自动布局约束在视图控制器生命周期中设置框架?