Xcode Storyboard - 将我对特定尺寸类的所有约束转换为 Any x Any 的约束

Posted

技术标签:

【中文标题】Xcode Storyboard - 将我对特定尺寸类的所有约束转换为 Any x Any 的约束【英文标题】:Xcode Storyboard - Convert all of my constraints for a specific size class to the constraint for Any x Any 【发布时间】:2016-10-19 12:53:20 【问题描述】:

我不久前遇到了这个问题,当时我通过 github 从另一台计算机上提取了一些故事板更新。

每次我打开 Xcode 时都会发生这种情况,加载需要很长时间,最后我会得到几十个,有时甚至是几百个错位的视图。这已经困扰了我一年多,我实际上只是检查了每个警告并将框架设置为他们期望摆脱警告的框架。

我发现错误是使用了 Size 类。事后看来,并不真的需要他们。我们只是一个纵向应用程序,并且无意实现横向功能。绝对不会很快。

问题是情节提要在 Any x Any 中加载,然后切换到 Compact x Regular,并且一堆视图放错了位置。

这是一个这样的错位视图的源代码:

<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"  />
<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>

要查看的是两个&lt;variation&gt; 块。

一个用于 Any x Any,另一个用于常规紧凑型。

我该如何解决这个问题,以便保留我在 Regular x Compact 尺寸类上的所有约束,但将它们都设为 Any x Any 的约束?

我有太多的手动操作,而且我不熟悉这是什么语言。 XAML?同理。

看着它,我想我可以将&lt;exclude 更改为&lt;include.. 在我破坏我的故事板之前有人可以验证这一点吗?

【问题讨论】:

【参考方案1】:

好的,这就是我发现的:

为每个项目创建约束,而不考虑 sizeclass。但是,有一个 &lt;include.....&gt;&lt;exclude...&gt; 设置,它们只包含在它们创建的尺寸类中/在尺寸检查器上检查。

我尝试对&lt;exclude 进行查找/替换并将其设置为&lt;include

问题在于它只包含所有约束

一个切题的问题是,当您创建一个对象并将其拖到您的视图控制器中时,它只会被添加到该大小类中。您必须将其添加到所有其他人。这并不像交换 '<include 而不是 &lt;exclude 最终会为每个尺寸类中不存在的对象添加约束。

如果您的故事板不是太大,并且您只使用一个尺寸等级(即我的应用程序只有纵向模式,没有横向模式),解决此问题的一种方法是转到每个对象的尺寸检查器并确保任何size 类被检查,并对其具有的每个约束执行相同的操作。

如果您使用多个尺寸等级,我认为没有一种解决此错误的好方法,而不会潜在地引入意外行为。愿上帝怜悯你的灵魂。

【讨论】:

答案源文本中的尖括号破坏了渲染; “我尝试查找/替换...”之后的内容丢失了。尝试以某种方式逃脱它们。

以上是关于Xcode Storyboard - 将我对特定尺寸类的所有约束转换为 Any x Any 的约束的主要内容,如果未能解决你的问题,请参考以下文章

将 StoryBoard 从 Xcode 更新到 Xcode 9 时出现 UI 问题

Xcode 10 Storyboard 非常慢到没有响应的地步

无法在 Xcode Storyboard 中为 ViewControllers 选择自定义类

Xcode Storyboard中有设置应用吗?

xCode swift Storyboard 单视图控制器,内部有多个/动态视图

使用 Xcode Storyboard 从表格视图单元推送到详细视图