OGeek|极客世界-中国程序员成长平台

标题: ios - 基本自动布局 - 嵌套宽度和动态高度 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-13 03:18
标题: ios - 基本自动布局 - 嵌套宽度和动态高度

简单的目标,但它演示了自动布局让我头疼的情况。我想要一个 256pt 宽度的堆栈 View 和一个 基于布局的动态高度(我不应该手动指定高度)。 里面应该是一个64pt x 64pt的 ImageView ,它也应该水平居中,并且距离 super View 的顶部有8pt。请注意, ImageView 不是唯一的 subview ,因此堆栈 View 的高度必须动态调整大小。

Auto Layout 现在告诉我堆栈 View 的 256pt 宽度约束和图像的 64pt 宽度约束之间存在冲突,以及一些神秘的“leading = Image.leading”和“trailing = Image.trailing”冲突我什至无法删除也找不到。

我是否遗漏了有关自动布局的内容?我希望所有逻辑都包含在界面构建器中,因此不需要任何代码。

运行 Xcode 9.1

Layout image



Best Answer-推荐答案


没有什么好混淆的。 iOS清楚地告诉你这个问题。

StackViews 根据子组件的大小(这称为隐式大小)获取大小,除非它被手动覆盖,如您的情况是 256pt。

因为stackView只是水平或垂直堆叠的多个childView的容器,现在因为你只添加了一个imageView,它添加了leadingtrailing约束这绝对有意义,因为您将单个 View 添加到 View 堆栈中,现在 stackView 应该做什么?将 childView(在您的情况下为 imageView)拉伸(stretch)到自己的大小。

但是你没有允许它,因为你现在向 imageView 添加了宽度约束,当它试图增加 imageView 的宽度时,imageView 的约束不会允许它。

因此它提示有太多冲突的约束。就是这样

some mysterious "leading = Image.leading" and "trailing = Image.trailing" conflict which I can't even delete nor find.

你不能删除它们,因为 imageView 是 stackView 中唯一的 View 。因为只有一个 subview 要堆叠,stackView 将从左侧(前导)开始到右侧(尾随)。因为现在 stackView 有自己的宽度,它试图改变 imageView 的宽度以反射(reflect)相同!但是图像宽度限制阻止了它的发生。

您想通过添加到 stackView 的 imageView 来实现什么。如果stackView中只有一个view,添加stackView没有任何意义。重新考虑你在做什么。

最后,当stackview中只有一个childView时,添加水平居中没有任何意义(无论stackView垂直/水平)。

关于ios - 基本自动布局 - 嵌套宽度和动态高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47328741/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://sqlite.in/) Powered by Discuz! X3.4