菜鸟教程小白 发表于 2022-12-13 17:00:04

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


                                            <p><p>我不久前遇到了这个问题,当时我通过 github 从另一台计算机上提取了一些 Storyboard更新。</p>

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

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

<p>问题是 Storyboard 在 Any x Any 中加载,然后切换到 Compact x Regular,并且一堆 View 放错了位置。</p>

<p>这是一个这样的错位 View 的源代码:</p>

<pre><code>&lt;imageView userInteractionEnabled=&#34;NO&#34; alpha=&#34;0.0&#34; contentMode=&#34;top&#34; horizontalHuggingPriority=&#34;251&#34; verticalHuggingPriority=&#34;251&#34; ambiguous=&#34;YES&#34; misplaced=&#34;YES&#34; image=&#34;SmallGreySwipeCircle&#34; translatesAutoresizingMaskIntoConstraints=&#34;NO&#34; id=&#34;jEr-aS-2Yb&#34; userLabel=&#34;previousIcon&#34;&gt;
&lt;rect key=&#34;frame&#34; x=&#34;70&#34; y=&#34;187&#34; width=&#34;180&#34; height=&#34;194&#34;/&gt;
&lt;constraints&gt;
      &lt;constraint firstAttribute=&#34;width&#34; constant=&#34;180&#34; id=&#34;JSJ-EG-Mmh&#34;/&gt;
    &lt;constraint firstAttribute=&#34;height&#34; constant=&#34;194&#34; id=&#34;TJx-aa-8Cn&#34;/&gt;
&lt;/constraints&gt;
&lt;variation key=&#34;default&#34;&gt;
    &lt;mask key=&#34;constraints&#34;&gt;
                &lt;exclude reference=&#34;JSJ-EG-Mmh&#34;/&gt;
                &lt;exclude reference=&#34;TJx-aa-8Cn&#34;/&gt;
            &lt;/mask&gt;
&lt;/variation&gt;
    &lt;variation key=&#34;heightClass=regular-widthClass=compact&#34;&gt;
      &lt;mask key=&#34;constraints&#34;&gt;
                &lt;include reference=&#34;JSJ-EG-Mmh&#34;/&gt;
                &lt;include reference=&#34;TJx-aa-8Cn&#34;/&gt;
            &lt;/mask&gt;
    &lt;/variation&gt;
&lt;/imageView&gt;
</code></pre>

<p>要查看的是两个 <code><variation></code>block 。 </p>

<p>一个用于 Any x Any,另一个用于常规紧凑型。</p>

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

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

<p>看着它,我想我可以将 <code><exclude</code> 更改为 <code><include</code>.. 在我破坏我的 Storyboard之前有人可以验证这一点吗?</p ></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>好的,这就是我发现的:</p>

<p>为每个项目创建约束,而不考虑 sizeclass。但是,有一个 <code><include.....></code> 和 <code><exclude...></code> 设置,它们只包含在它们在/中创建的大小类中检查大小检查器。</p>

<p>我尝试对 <code><exclude</code> 进行查找/替换并将其设置为 <code><include</code>。</p>

<p>问题在于它只包含所有<em>约束</em>。</p>

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

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

<p>如果您使用多个尺寸等级,我认为没有一种解决此错误的好方法,而不会潜在地引入意外行为。愿上帝怜悯你的灵魂。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - Xcode Storyboard - 将我对特定尺寸类的所有约束转换为 Any x Any 的约束,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/37885724/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/37885724/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - Xcode Storyboard - 将我对特定尺寸类的所有约束转换为 Any x Any 的约束