故事板中的自动布局是全部还是全部?

Posted

技术标签:

【中文标题】故事板中的自动布局是全部还是全部?【英文标题】:Auto layout is all or nothing in a storyboard? 【发布时间】:2013-02-07 01:36:52 【问题描述】:

我一直在开发一个企业 iPad 客户端应用程序,该应用程序具有相当复杂的包含视图控制器层次结构。我最近不得不在应用程序启动视图(服务器登录视图)中实现重新设计。我决定借此机会使用自动布局实现重新设计,并保持应用程序的其余部分不变。在观看了 WWDC 视频并破解了代码几天后,我对登录文本字段进行了流畅、动画的重新定位,以进行旋转和键盘显示/隐藏事件。对结果满意,我git合并了重构分支,才发现登录后使用应用时应用崩溃,没有调试器提示。我终于发现自动布局以某种方式级联到子容器视图控制器。

在 Main.storyboard 中有一个“主”导航控制器,它有一个 RootViewController 根视图控制器,其视图是子视图控制器视图的容器,从登录视图开始,然后交换到上次使用的视图控制器用户。重构后,在 IB 中,服务器登录控制器已选中“使用自动布局”。但是突然之间,一个从未启用自动布局的子视图控制器也被检查了。当我在该视图控制器上取消选中它时,突然我的服务器登录 vew 控制器自动布局复选框未选中。这是否意味着在故事板中的所有视图控制器上启用/禁用自动布局?如果没有,有人知道发生了什么吗? Xcode 4.6

【问题讨论】:

【参考方案1】:

答案来自 Apple 开发者论坛中的 KMT,即在情节提要级别启用了自动布局。我不知何故错过了 WWDC 视频中的这一关键部分。

我通过创建一个启用“使用自动布局”的新故事板文件解决了我的特定问题,并将启用自动布局的视图控制器移到其中。不幸的是,在发现在情节提要级别启用自动布局的过程中,这意味着每当我取消选中 Main.storyboard 中任何对象上的“使用自动布局”复选框时,IB 都会应用最佳猜测约束来替换我拥有的现有弹簧/支柱属性之前设置的。然后当取消选中“使用自动布局”复选框时,它应用最佳猜测弹簧/支柱属性来替换其最佳猜测约束。最终结果是我不得不将弹簧/支柱设置重新应用到情节提要文件中的许多视图。

【讨论】:

以上是关于故事板中的自动布局是全部还是全部?的主要内容,如果未能解决你的问题,请参考以下文章

UITableViewCell 子类布局在禁用自动布局的故事板中搞砸了

iOS 自动布局:如何在 Xcode 故事板中为 iPad 横向和 iPad 纵向设计不同的布局?

故事板中自动布局标签的表格视图单元格约束[关闭]

在自定义 UIView 类 Iphone 上应用自动布局约束。

在 Xcode 中重新制作故事板

代码中的自动布局约束与 XIB 中的大小冲突