所以我创建了这个场景,以便了解视图如何根据内容增加高度。但是我仍然无法实现它。
这就是我现在所拥有的:
textview正在根据内容增长。但是包含它的uiview正在消失。我应该使用哪些约束,以便当uitextview变大时,其父视图的高度也会增加?
答案 0 :(得分:10)
首先清除所有限制因素,以便我们有一个新鲜的名单。
第1步:构建视图层次结构。在这个例子中,我们想要这样的东西:
视图控制器的视图(我们称之为parentView
)有一个子视图,我们称之为redView
。 redView
有一个孩子,一个文字字段,我们称之为textField
。
层次结构如下所示:
步骤2:设置任何特定于任何单个视图的约束。在这种情况下,我们可能只想在文本视图上设置宽度约束。现在,我只需要设置200pts的宽度。
第3步:在textView
及其父级redView
之间设置约束。假设我们想要一个10pt的边界。让我们添加这些约束:
一旦我们添加了这些约束,我们就会收到一些自动布局警告和错误。首先,因为我为superview添加的约束和superview的空间与实际大小不匹配,我会得到一些警告:
还会有一些错误描述redView
和textView
的缺失X和Y位置。这里的错误实际上是必要的两倍。 textView
知道相对于redView
的位置。textView
。我们不需要更多限制来整理redView
的位置。但是,textView
不知道在哪里定位自己......所以最终textView
也不知道。
我们可以更新redView
的框架以消除警告,但让我们继续并修复实际错误。
第5步:设置superView
相对于redView
的约束。 redView
已经知道它的大小。请注意,redView
的宽度没有错误。它只是不知道在哪里。在这种情况下,我会简单地说我们希望height
居中。所以我们想要添加这些约束:
现在我们已经解决了一些问题。剩下的唯一问题是textView
用于所有事情。
要解决此问题,我们必须设置parentView
的内容大小优先级。将这些全部设置为1000并将“内部大小”属性更改为“占位符”。
到目前为止,所有的自动布局错误都应该消失,我们应该只留下警告,因为我们的故事板框架与我们的约束条件不符。
我们可以通过选择textView
并更新所有框架来解决这个问题:
对于基于内容大小的自动调整,这个自动布局难题有一个最后的警告:如果我们的文本视图没有内容会发生什么?
如果我们的textview没有内容,自动布局将选择0的高度,我们的用户甚至无法看到那里有文本视图,更不用说添加内容(并使其扩展) )。使用自动布局和基于内容的大小调整时,我们几乎总是应该确保为内容视图设置了显式或最小大小。
我们不必担心textView
的宽度,因为我们将其明确设置为200.所以让我们添加一个最小高度约束。首先添加任何高度约束:
现在转到textView
的尺寸检查器,找到我们添加的高度约束,并将其编辑为大于或等于约束:
故事板不会反映我们{{1}}中内容的变化并适当调整其大小,但您的约束现在已正确设置,这将在您的设备或模拟器中正常运行。
答案 1 :(得分:1)
ON UITextView让你取消选择这些
现在更改这样的自动布局约束。
答案 2 :(得分:-2)
在Storyboard页面上,单击您的textview。 然后点击右下角的小三角形。
先点击"清除约束"。 然后开启"添加缺失约束"。
这是最简单的方法。