所以我创建了这个场景,以了解 View 如何根据其内容增加高度。但是,我仍然无法实现。
这就是我现在所拥有的:
textview 根据内容增长。然而,包含它的 uiview 正在消失。我应该使用什么约束,以便当 uitextview 变大时,其父 View 的高度也会增加?
最佳答案
首先从一切中清除您的所有限制,以便我们有一个新的石板。
第 1 步:构建您的 View 层次结构。在这个例子中,我们想要这样的东西:
View Controller 的 View ,我们称之为 parentView
有一个 subview ,我们称之为 redView
.那个redView
有一个 child ,一个文本字段,我们称之为 textField
.
层次结构如下所示:
第 2 步:设置特定于任何单个 View 的任何约束。在这种情况下,我们可能只想在我们的 TextView 上设置宽度约束。现在,我将设置宽度为 200pts。
第 3 步:设置 textView
之间的约束及其父级,redView
.假设我们想要一个 10pt 的边框。让我们添加这些约束:
一旦我们添加了这些约束,我们就会收到一些自动布局警告和错误。对于初学者来说,因为我为 with 和空间添加到 superview 的约束与实际大小不匹配,我会收到一些这样的警告:
还会有一些错误描述 redView
缺少 X 和 Y 位置和 textView
.这里的错误确实是必要的两倍。 textView
知道相对于 redView
的位置.我们不需要更多的约束来梳理 textView
的位置。然而,redView
还不知道将自己定位在哪里......所以最终,textView
也有点不知道。
我们可以更新 textView
的框架来消除警告,但让我们继续修复实际错误。
第五步:设置redView
的约束相对于 superView
. redView
已经知道要多大了。请注意,我们对 redView
没有错误。的宽度。它只是不知道在哪里。在这种情况下,我会简单地说我们想要 redView
要居中。所以我们要添加这些约束:
现在我们已经解决了一些问题。唯一剩下的问题是 height
对于一切。
为了解决这个问题,我们必须设置 textView
的内容大小优先级。 .将这些全部设置为 1000,并将“Intrinsic Size”属性更改为“Placeholder”。
到现在为止,所有的自动布局错误都应该消失了,我们应该只剩下警告,因为我们的 Storyboard框架与我们的约束所说的不匹配。
我们可以通过选择 parentView
来解决这个问题。并更新所有帧:
当涉及到基于内容大小的自动调整大小时,这个自动布局难题还有一个最后的警告:如果我们的 TextView 没有内容会发生什么?
如果我们的 textview 没有内容,自动布局将选择高度为 0,我们的用户甚至无法看到那里有一个 text view,更不用说点击它来添加内容(并使其展开)。当使用自动布局和基于内容的大小调整时,我们几乎总是应该确保我们已经为内容 View 设置了明确的或最小的大小。
我们不用担心我们的textView
的宽度,因为我们将其明确设置为 200。所以让我们添加一个最小高度约束。首先添加任何高度约束:
现在转到 textView
的尺寸检查器,找到我们添加的这个高度约束,编辑成大于或等于约束:
Storyboard不会反射(reflect)我们 textView
中内容的变化并适当调整其大小,但您的约束现在已正确设置,这将在您的设备或模拟器中正常运行。
关于ios - 如何使用自动布局更改uiview的高度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27089195/