ios - 基本自动布局 - 嵌套宽度和动态高度
<p><p>简单的目标,但它演示了自动布局让我头疼的情况。我想要一个 <strong>256pt 宽度的堆栈 View </strong> 和一个 <strong>基于布局的动态高度</strong>(我不应该手动指定高度)。
里面应该是一个<strong>64pt x 64pt</strong>的 ImageView ,它也应该<strong>水平居中,并且距离 superView 的顶部有8pt</strong>。请注意, ImageView 不是唯一的 subview ,因此堆栈 View 的高度必须动态调整大小。</p>
<p>Auto Layout 现在告诉我堆栈 View 的 256pt 宽度约束和图像的 64pt 宽度约束之间存在冲突,以及一些神秘的“leading = Image.leading”和“trailing = Image.trailing”冲突我什至无法删除也找不到。</p>
<p>我是否遗漏了有关自动布局的内容?我希望所有逻辑都包含在界面构建器中,因此不需要任何代码。</p>
<p>运行 Xcode 9.1</p>
<p> <a href="/image/W3IYa.png" rel="noreferrer noopener nofollow">Layout image</a> </p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>没有什么好混淆的。 iOS清楚地告诉你这个问题。 </p>
<p><code>StackViews</code> 根据子组件的大小(这称为隐式大小)获取大小,除非它被手动覆盖,如您的情况是 256pt。</p>
<p>因为stackView只是水平或垂直堆叠的多个childView的容器,现在因为你只添加了一个imageView,它添加了<code>leading</code>和<code>trailing</code>约束这绝对有意义,因为您将单个 View 添加到 View 堆栈中,现在 stackView 应该做什么?将 childView(在您的情况下为 <code>imageView</code>)拉伸(stretch)到自己的大小。</p>
<p>但是你没有允许它,因为你现在向 <code>imageView</code> 添加了宽度约束,当它试图增加 imageView 的宽度时,imageView 的约束不会允许它。</p>
<p>因此它提示有太多冲突的约束。就是这样:) </p>
<blockquote>
<p>some mysterious "leading = Image.leading" and "trailing =
Image.trailing" conflict which I can't even delete nor find.</p>
</blockquote>
<p>你不能删除它们,因为 imageView 是 stackView 中唯一的 View 。因为只有一个 subview 要堆叠,stackView 将从左侧(前导)开始到右侧(尾随)。因为现在 stackView 有自己的宽度,它试图改变 imageView 的宽度以反射(reflect)相同!但是图像宽度限制阻止了它的发生。</p>
<p>您想通过添加到 stackView 的 imageView 来实现什么。如果stackView中只有一个view,添加stackView没有任何意义。重新考虑你在做什么。</p>
<p>最后,当stackview中只有一个childView时,添加水平居中没有任何意义(无论stackView垂直/水平)。</p></p>
<p style="font-size: 20px;">关于ios - 基本自动布局 - 嵌套宽度和动态高度,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/47328741/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/47328741/
</a>
</p>
页:
[1]