Xcode Storyboard - 将特定大小类的所有约束转换为Any x Any的约束

问题描述 投票:2回答:1

我不久前遇到了这个问题,当时我通过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" 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>积木。

一个用于Any x Any,另一个用于常规压缩。

我怎样才能解决这个问题,以便保留我在Regular x Compact大小类上的所有约束,但是对Any x Any进行约束?

我手动执行此操作太多了,而且我不熟悉这种语言。 XAML? IDK。

看着它,我想猜测我可以将<exclude改为<include ..在打破我的故事板之前,有没有人可以验证这个?

ios xcode constraints uistoryboard size-classes
1个回答
1
投票

好的,所以这就是我发现的:

无论sizeclass如何,都会为每个项创建约束。但是,有一个<include.....><exclude...>设置,它们只包含在Size Inspector中创建/检查的大小类中。

我试着为<exclude做一个查找/替换并将其设置为<include

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

一个切线问题是,当您创建一个对象并将其拖动到视图控制器中时,它只会被添加到该大小类中。您必须将其添加到所有其他人。这并不像交换'<include。这些仅添加到ViewController的每个大小类的实现中,因此将约束设置为<include而不是<exclude最终会为每个大小类中不存在的对象添加约束。

如果你的故事板不是太大,你只使用一个大小的类(即我的应用程序只是纵向模式,没有风景),解决这个问题的方法是去每个对象的大小检查器,并确保任何大小类是检查,并对其拥有的每个约束执行相同操作。

如果您使用多个大小类,我认为没有一种好方法可以解决此错误而不会引入意外行为。愿上帝怜悯你的灵魂。

© www.soinside.com 2019 - 2024. All rights reserved.