将 iOS 项目转换为自动布局

Posted

技术标签:

【中文标题】将 iOS 项目转换为自动布局【英文标题】:Converting an iOS project to auto layout 【发布时间】:2014-10-23 18:27:33 【问题描述】:

我使用的是 Xcode 6 和 ios 8。该项目是从 iOS 5 开始编写的,而不是使用自动布局。因此,有大量的自动调整大小和大量通过操纵框架来移动控件和视图的代码。

我知道同时使用两者都可以,但是您是否进行了完整的转换,并消除了对框架属性的所有引用,还是只保留那些有效的?

例如,动态创建一个控件,该控件将被放置在视图中,但不需要在该视图中操纵其位置。你会摆脱 initWithFrame: 并通过约束来完成它,还是直接离开它?

在我看来,两者可以共存,只要控件在创建和放置后是静态的。

【问题讨论】:

【参考方案1】:

您可以在同一个项目甚至同一个视图控制器中混合使用自动布局和框架代码。如何迁移到仅使用自动布局取决于您。你有多少时间?现有的框架代码维护起来有多复杂?

我们在应用中采用的方法是创建一个故事板并向其中添加视图控制器。我们将这些映射到我们现有的 VC 类,然后测试它们的外观。

我们开始用故事板中的视图替换在代码中创建的视图,使用约束来定位它们。对于表格视图,我们用情节提要中的原型单元格替换了许多定义自定义单元格的丑陋 .xib 文件。我们还用情节提要中的视图替换了表格页眉和页脚。

我们发现将整个视图控制器转换为全自动布局方法通常效果最好,从而消除对框架的任何使用。一些视图控制器具有非常复杂的框架逻辑,我们不去管它——我们甚至没有在故事板中定义这些。

总的来说,我们将大约 25 或 30 个视图控制器迁移到情节提要中,并且做得非常好。尽管偶尔会让人头疼,但我还是故事板和自动布局的忠实粉丝。它使我们向更大设备的过渡非常顺利。

【讨论】:

感谢您的回答。我认为这是沿着这些路线,但想了解其他人在做什么。我们有同样的情况;一些控制器有很多代码调整框架,我假设其中一些会被留下,大部分会被转换。

以上是关于将 iOS 项目转换为自动布局的主要内容,如果未能解决你的问题,请参考以下文章

iOS自动布局,列对齐

从 Xcode 8 转换为 Xcode 9 的项目的自动布局失败

尝试理解 iOS 8 中的 UIScrollView 自动布局

将自动布局(约束)从 xib/storyboard 转换为代码? [关闭]

项目从Xcode 8转换为Xcode 9时自动布局失败

无法将 iOS 自动布局乘数设置为零