toolsVersion="11201" 弄乱了我的故事板

toolsVersion="11201" is messing my storyboard

将我的 xCode 更新为 8.0 并将我的设备上的应用程序更新为 运行 后,我注意到故事板中的集合视图乱七八糟,框架不再适合该视图.

只有当我打开故事板时才会发生这种情况(似乎 xcode 在我第一次打开 xcode 中的文件后添加了一些属性)。 当我用我的旧故事板替换故事板然后构建应用程序而不打开它时,一切都按预期工作。

经过几个小时的搜索可能是什么原因并比较故事板源代码(打开后旧代码和新代码之间),我发现原因是在以下位置找到的 toolsVersion 属性故事板源代码的顶部。

     <document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" 
     toolsVersion="11201" systemVersion="15G1004" targetRuntime="iOS.CocoaTouch"
     propertyAccessControl="none" useAutolayout="YES" colorMatched="YES"
     initialViewController="wZn-Em-z41">

当我更换 toolsVersion="11201" with toolsVersion="10116" 后一切又正常了。

如何强制工具版本为一个值?这是什么 属性 以及为什么它会打乱我的约束和框架。

感谢有关此问题的任何信息。

这里的问题是,对于工具版本 11201 (Xcode 8),似乎具有完全限定约束的视图不再在故事板中指定框架(因为约束将在运行时确定框架).

因此在评估约束之前您不能依赖框架(即不要在 viewDidLoad 或 viewWillAppear 中使用框架)。一旦评估了约束,框架似乎就没问题了。在对它们进行评估之前,框架似乎被报告为 1000 x 1000(至少,在各种情况下对我来说都是如此)。

所以有两个解决方案:1) 为您的约束创建一个出口并使用它而不是依赖框架,或者 2) 在 约束被取消后使用框架评估(例如,在 viewDidAppear 方法中)。