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

所以我创build了这个场景,以便了解视图是如何根据内容增加高度的。 但是,我仍然无法做到这一点。

这是我现在所拥有的:

在这里输入图像说明

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

在UITextView上让你取消选中这些

  • 滚动已启用
  • 反弹
  • 水平弹跳
  • 垂直弹跳
  • 显示水平指示器
  • 显示垂直指示器

现在改变像这样的自动布局约束。

在这里输入图像说明

父视图的约束

首先清除你所有的约束,所以我们有一个新的石板。

第1步:build立你的视图层次结构。 在这个例子中,我们想要这样的东西:

在这里输入图像说明

视图控制器的视图,我们将调用parentView有一个子视图,我们将调用redView 。 该redView有一个孩子,一个文本字段,我们将其称为textField

层次结构如下所示:

在这里输入图像说明

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

在这里输入图像说明

第3步:设置redView和它的父级redView之间的约束。 假设我们想要一个10pt的边框。 我们来添加这些限制:

在这里输入图像说明

一旦我们添加了这些限制,我们会得到一些自动布局的警告和错误。 对于初学者来说,由于我添加的约束以及超级视图的空间与实际大小不匹配,我会得到如下一些警告:

在这里输入图像说明

还会有一些错误,描述redViewredView丢失的X和Y位置。 这里的错误实际上是必要的两倍。 redView知道相对于redView位置。 我们不需要更多的约束来整理textView的位置。 但是, redView不知道自己的位置,所以最终, textView也不完全知道。

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

第5步:设置相对于superView约束。 redView已经知道尺寸是多less。 注意我们没有错误的redView的宽度。 它只是不知道在哪里。 在这种情况下,我会简单的说,我们希望redView中心。 所以我们想要添加这些约束:

在这里输入图像说明

现在我们已经解决了一些问题。 唯一的问题就是一切的height

为了解决这个问题,我们必须设置textView的内容大小优先级。 将这些全部设置为1000,并将“内在尺寸”属性更改为“占位符”。

在这里输入图像说明

到目前为止,所有的自动布局错误都应该消失,我们只能留下警告,因为我们的故事板框架不符合我们的约束条件。

我们可以通过selectparentView和更新所有框架来解决这个问题:

在这里输入图像说明在这里输入图像说明

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

如果我们的textview没有内容,自动布局会select0的高度,我们的用户甚至无法看到有一个文本视图,更不用说添加内容(并扩大)。 在使用自动布局和基于内容的大小调整时,我们几乎总是应该确保已经为内容视图设置了明确的或最小的大小。

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

在这里输入图像说明

现在转到textView的大小检查器,find我们添加的高度约束,并将其编辑为大于或等于约束:

在这里输入图像说明

故事板不会反映在我们的textView中的内容的变化,并适当调整它的大小,但您的约束现在正确地设置,这将在您的设备或在模拟器适当的行为。

在Storyboard页面上,点击你的textview。 然后点击右下angular的小三angular形。

首先点击“清除约束”。 然后在“添加缺less约束”。

它是最简单的方法。