gpt4 book ai didi

ios - 基本自动布局 - 嵌套宽度和动态高度

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:22:01 24 4
gpt4 key购买 nike

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

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

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

运行 Xcode 9.1

Layout image

最佳答案

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

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

因为 stackView 只是水平或垂直堆叠的多个 subview 的容器,现在因为您只向其添加了一个 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 将从左侧(leading)开始到右侧(trailing)。因为现在 stackView 有自己的宽度,它会尝试更改 imageView 的宽度以反射(reflect)相同的宽度!但图像宽度限制阻止了它的发生。

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

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

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com