ios - 如何使用自动布局更改uiview的高度?

标签 ios uiview autolayout uitextview xcode-storyboard

所以我创建了这个场景,以了解 View 如何根据其内容增加高度。但是,我仍然无法实现。

这就是我现在所拥有的:

enter image description here

textview 根据内容增长。然而,包含它的 uiview 正在消失。我应该使用什么约束,以便当 uitextview 变大时,其父 View 的高度也会增加?

最佳答案

首先从一切中清除您的所有限制,以便我们有一个新的石板。

第 1 步:构建您的 View 层次结构。在这个例子中,我们想要这样的东西:

enter image description here

View Controller 的 View ,我们称之为 parentView有一个 subview ,我们称之为 redView .那个redView有一个 child ,一个文本字段,我们称之为 textField .

层次结构如下所示:

enter image description here

第 2 步:设置特定于任何单个 View 的任何约束。在这种情况下,我们可能只想在我们的 TextView 上设置宽度约束。现在,我将设置宽度为 200pts。

enter image description here

第 3 步:设置 textView 之间的约束及其父级,redView .假设我们想要一个 10pt 的边框。让我们添加这些约束:

enter image description here

一旦我们添加了这些约束,我们就会收到一些自动布局警告和错误。对于初学者来说,因为我为 with 和空间添加到 superview 的约束与实际大小不匹配,我会收到一些这样的警告:

enter image description here

还会有一些错误描述 redView 缺少 X 和 Y 位置和 textView .这里的错误确实是必要的两倍。 textView知道相对于 redView 的位置.我们不需要更多的约束来梳理 textView的位置。然而,redView还不知道将自己定位在哪里......所以最终,textView也有点不知道。

我们可以更新 textView的框架来消除警告,但让我们继续修复实际错误。

第五步:设置redView的约束相对于 superView . redView已经知道要多大了。请注意,我们对 redView 没有错误。的宽度。它只是不知道在哪里。在这种情况下,我会简单地说我们想要 redView要居中。所以我们要添加这些约束:

enter image description here

现在我们已经解决了一些问题。唯一剩下的问题是 height对于一切。

为了解决这个问题,我们必须设置 textView 的内容大小优先级。 .将这些全部设置为 1000,并将“Intrinsic Size”属性更改为“Placeholder”。

enter image description here

到现在为止,所有的自动布局错误都应该消失了,我们应该只剩下警告,因为我们的 Storyboard框架与我们的约束所说的不匹配。

我们可以通过选择 parentView 来解决这个问题。并更新所有帧:

enter image description here enter image description here

当涉及到基于内容大小的自动调整大小时,这个自动布局难题还有一个最后的警告:如果我们的 TextView 没有内容会发生什么?

如果我们的 textview 没有内容,自动布局将选择高度为 0,我们的用户甚至无法看到那里有一个 text view,更不用说点击它来添加内容(并使其展开)。当使用自动布局和基于内容的大小调整时,我们几乎总是应该确保我们已经为内容 View 设置了明确的或最小的大小。

我们不用担心我们的textView的宽度,因为我们将其明确设置为 200。所以让我们添加一个最小高度约束。首先添加任何高度约束:

enter image description here

现在转到 textView 的尺寸检查器,找到我们添加的这个高度约束,编辑成大于或等于约束:

enter image description here

Storyboard不会反射(reflect)我们 textView 中内容的变化并适当调整其大小,但您的约束现在已正确设置,这将在您的设备或模拟器中正常运行。

关于ios - 如何使用自动布局更改uiview的高度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27089195/

相关文章:

iphone - 使用 NSLayoutConstraint 将大型 UIView 居中

ios - setContentOffset 没有将表格滚动到最后一个单元格

ios - 使用 UISearchController 时无法推送 View Controller

c++ - 为什么 __weak 属性需要运行时支持

ios - 如何在Objective-C中检查多个Switch大小写值?

iphone - 在 iPhone 应用程序中存储测验问题

iPhone - 从 nib 文件加载 UIView?

ios - UIView 的阴影就像建筑物的阴影

ios - 表头 View 自动布局问题

ios - 如何获得影响给定 subview 的自动布局约束?