不久前我遇到了这个问题,当时我通过 github 从另一台计算机上提取了一些 Storyboard 更新。
每次我打开 Xcode 时,它都需要很长时间才能加载,最后我会看到几十个,有时是数百个放错地方的 View 。这已经困扰我一年多了,我实际上只是仔细检查了每一个警告,并将框架设置为他们希望摆脱警告的框架。
我追踪到错误是使用了 Size 类。事后看来,真的不需要他们。我们只是一个纵向应用程序,无意实现横向功能。绝对不会很快。
问题是 Storyboard 在 Any x Any 中加载,然后切换到 Compact x Regular,并且一堆 View 放错了位置。
这是一个错误放置的 View 的源代码:
<imageView userInteractionEnabled="NO" alpha="0.0" contentMode="top" horizontalHuggingPriority="251" verticalHuggingPriority="251" ambiguous="YES" misplaced="YES" image="SmallGreySwipeCircle" translatesAutoresizingMaskIntoConstraints="NO" id="jEr-aS-2Yb" userLabel="previousIcon">
<rect key="frame" x="70" y="187" width="180" height="194"/>
<constraints>
<constraint firstAttribute="width" constant="180" id="JSJ-EG-Mmh"/>
<constraint firstAttribute="height" constant="194" id="TJx-aa-8Cn"/>
</constraints>
<variation key="default">
<mask key="constraints">
<exclude reference="JSJ-EG-Mmh"/>
<exclude reference="TJx-aa-8Cn"/>
</mask>
</variation>
<variation key="heightClass=regular-widthClass=compact">
<mask key="constraints">
<include reference="JSJ-EG-Mmh"/>
<include reference="TJx-aa-8Cn"/>
</mask>
</variation>
</imageView>
要看的是两个 <variation>
block 。
一个用于 Any x Any,另一个用于常规压缩。
我该如何解决这个问题,以便保留我对 Regular x Compact 尺寸类的所有约束,但让它们成为 Any x Any 的所有约束?
我有太多无法手动执行此操作,而且我不熟悉这是什么语言。 XAML?同上。
看着它,我想我可以改变 <exclude
至 <include
.. 在我破坏我的 Storyboard之前,任何人都可以验证这一点吗?
最佳答案
好的,这是我发现的:
无论大小类别如何,都会为每个项目创建约束条件。但是,有一个 <include.....>
和 <exclude...>
设置,它们只会包含在尺寸检查器中创建/检查的尺寸类别中。
我试着为 <exclude
做一个查找/替换并将其设置为 <include
.
问题是它只包含所有约束。
一个切线问题是,当您创建一个对象并将其拖到您的 View Controller 中时,它只会被添加到该尺寸类中。您必须将它添加到所有其他的。这不像交换 '<exclude
最终为每个尺寸类别中不存在的对象添加约束。
如果您的 Storyboard不是太大,并且您只使用一个尺寸类别(即我的应用只有纵向模式,没有横向模式),解决这个问题的方法是转到每个对象的尺寸检查器并确保 Any检查大小类,并对它具有的每个约束执行相同的操作。
如果您使用多个大小类别,我认为没有一种好的方法可以在不引入意外行为的情况下解决此错误。愿上帝怜悯你的灵魂。
关于ios - Xcode Storyboard - 将我对特定大小类的所有约束转换为 Any x Any 的约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37885724/