菜鸟教程小白 发表于 2022-12-12 20:06:12

ios - 使用自动布局以编程方式将 subview 添加到 UIView 时出现错误的来源


                                            <p><p>我有一个 <code>UIView</code> 子类,我在其中以编程方式创建和添加一些 subview 。确切地说,我有 6 个 subview 水平对齐,彼此相邻,它们之间的空间为零。侧边距(即从我的 View 左边框到第一个 subview 的距离以及从最后一个 subview 到我的 View 右边框的距离)必须为​​ 16pt,并且剩余空间必须在 subview 之间平均分配。它应该是这样的:</p>

<p> <a href="/image/tndND.png" rel="noreferrer noopener nofollow"><img src="/image/tndND.png" alt="enter image description here"/></a> </p>

<p>我正在尝试使用这样的自动布局来完成此操作:</p>

<pre><code>NSDictionary *viewsDict = @{@&#34;digit1&#34;:digit1, @&#34;digit2&#34;:digit2, @&#34;digit3&#34;:digit3, @&#34;digit4&#34;:digit4, @&#34;digit5&#34;:digit5, @&#34;digit6&#34;:digit6};
-16-|&#34; options:0 metrics:nil views:viewsDict]];
</code></pre>

<p>当我在具有 320pt 屏幕 View 的 iPhone 5 上运行此程序时,我期望得到以下结果:</p>

<p> subview 宽度:(320 - 2*16)/6 = <strong>48</strong></p>

<p>所以框架应该是:</p>

<pre><code>digit1: x =16, width = 48
digit2: x =64, width = 48
digit3: x = 112, width = 48
digit4: x = 160, width = 48
digit5: x = 208, width = 48
digit6: x = 256, width = 48
</code></pre>

<p>但是,在运行时会发生一件奇怪的事情:我的边距是错误的:</p>

<p> <a href="/image/eMGH4.png" rel="noreferrer noopener nofollow"><img src="/image/eMGH4.png" alt="enter image description here"/></a> </p>

<p>我得到的 subview 框架是这些:</p>

<pre><code>digit1: x =21, width = 48
digit2: x =66, width = 48
digit3: x = 111, width = 48
digit4: x = 156, width = 48
digit5: x = 201, width = 48
digit6: x = 246, width = 48
</code></pre>

<p>所以我的左边距是 21pt,右边是 26pt。此外, subview 重叠 3pt。</p>

<p>我已经用 Reveal 检查了 View 层次结构,我可以确认 <em></em> 有一个正确的常数为 16 的边距约束。但由于某种原因,框架有所不同。似乎也没有任何其他冲突的约束,我在运行应用程序时也没有收到自动布局错误。</p>

<p>谁能看到我在这里遗漏了什么?</p>

<p><strong>编辑:</strong></p>

<p>使用间隔 View 而不是间距限制来测试 Aloks 建议我尝试了这个:</p>

<pre><code>UIView *spacer1 = [ init];
UIView *spacer2 = [ init];
spacer1.translatesAutoresizingMaskIntoConstraints = NO;
spacer2.translatesAutoresizingMaskIntoConstraints = NO;
spacer1.backgroundColor = ;
spacer2.backgroundColor = ;
;
;
NSDictionary *viewsDict = @{@&#34;spacer1&#34;:spacer1, @&#34;digit1&#34;:digit1, @&#34;digit2&#34;:digit2, @&#34;digit3&#34;:digit3, @&#34;digit4&#34;:digit4, @&#34;digit5&#34;:digit5, @&#34;digit6&#34;:digit6, @&#34;spacer2&#34;:spacer2};
|&#34; options:0 metrics:nil views:viewsDict]];
</code></pre>

<p>这给了我以下结果:</p>

<p> <a href="/image/Bx6wt.png" rel="noreferrer noopener nofollow"><img src="/image/Bx6wt.png" alt="enter image description here"/></a> </p>

<p>如您所见,间隔 View 的位置正确,但数字 subview 仍保留在原来的位置。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>你的约束应该是这样的:</p>

<p><code>等宽</code>到每个 View 彼此</p>

<p><code>固定高度</code>到每个 View </p>

<p><code>前导、尾随和顶部或底部(合适)</code>到每个 View 。</p>

<p>它会正常工作</p>

<p>查看此约束的输出</p>

<p> <a href="/image/Zxvwi.png" rel="noreferrer noopener nofollow"><img src="/image/Zxvwi.png" alt="enter image description here"/></a> </p>

<p>你只需要把它转换成代码!!!!</p>

<p>如果您以编程方式添加 View ,那么如何设置 View 的框架也很重要。根据屏幕尺寸,您的框架应该是动态的。</p>

<p>希望这会有所帮助:)</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 使用自动布局以编程方式将 subview 添加到 UIView 时出现错误的来源,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/37322384/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/37322384/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 使用自动布局以编程方式将 subview 添加到 UIView 时出现错误的来源