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

时间:2014-11-23 12:56:05

标签: ios uiview autolayout uitextview xcode-storyboard

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

这就是我现在所拥有的:

enter image description here

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

3 个答案:

答案 0 :(得分:10)

首先清除所有限制因素,以便我们有一个新鲜的名单。

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

enter image description here

视图控制器的视图(我们称之为parentView)有一个子视图,我们称之为redViewredView有一个孩子,一个文字字段,我们称之为textField

层次结构如下所示:

enter image description here

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

enter image description here

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

enter image description here

一旦我们添加了这些约束,我们就会收到一些自动布局警告和错误。首先,因为我为superview添加的约束和superview的空间与实际大小不匹配,我会得到一些警告:

enter image description here

还会有一些错误描述redViewtextView的缺失X和Y位置。这里的错误实际上是必要的两倍。 textView知道相对于redView的位置。textView。我们不需要更多限制来整理redView的位置。但是,textView不知道在哪里定位自己......所以最终textView也不知道。

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

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

enter image description here

现在我们已经解决了一些问题。剩下的唯一问题是textView用于所有事情。

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

enter image description here

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

我们可以通过选择textView并更新所有框架来解决这个问题:

enter image description here enter image description here

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

如果我们的textview没有内容,自动布局将选择0的高度,我们的用户甚至无法看到那里有文本视图,更不用说添加内容(并使其扩展) )。使用自动布局和基于内容的大小调整时,我们几乎总是应该确保为内容视图设置了显式或最小大小。

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

enter image description here

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

enter image description here

故事板不会反映我们{{1}}中内容的变化并适当调整其大小,但您的约束现在已正确设置,这将在您的设备或模拟器中正常运行。

答案 1 :(得分:1)

ON UITextView让你取消选择这些

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

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

enter image description here

Constraints for parent view

答案 2 :(得分:-2)

在Storyboard页面上,单击您的textview。 然后点击右下角的小三角形。

先点击"清除约束"。 然后开启"添加缺失约束"。

这是最简单的方法。