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 = @{@"digit1":digit1, @"digit2":digit2, @"digit3":digit3, @"digit4":digit4, @"digit5":digit5, @"digit6":digit6};
-16-|" 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 = @{@"spacer1":spacer1, @"digit1":digit1, @"digit2":digit2, @"digit3":digit3, @"digit4":digit4, @"digit5":digit5, @"digit6":digit6, @"spacer2":spacer2};
|" 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]