【发布时间】:2014-01-08 15:57:16
【问题描述】:
我正在尝试管理屏幕上的视图,以便所有视图都根据文本视图进行更新,该文本视图根据输入的文本而增长。
在我的控制器视图中,我有两个子视图。我们称它们为 view1 和 view2。 View1 有一个 uitextview 子视图,它根据输入的文本而增长和缩小。
我遇到的问题是 view1 和 view2 在打字时不会增长和缩小。 textView 底部垂直间距的约束常量已设置为距其父视图 10px。 view1 和 view2 之间的垂直间距设置为 0。这是视图的可视化表示:
---------------------
| |
| ----------------- |
| | UITextView | |
| ----------------- |
| view1 |
---------------------
| |
| |
| |
| |
| view2 |
| |
| |
| |
| |
| |
---------------------
向 textView 添加文本时得到的结果是:
---------------------
| |
| ----------------- |
| | UITextView | |
| | | |
| | | |
---------------------
| |
| |
| |
| |
| view2 |
| |
| |
| |
| |
| |
---------------------
但理想的行为应该是这样的:
---------------------
| |
| ----------------- |
| | UITextView | |
| | | |
| | | |
| | | |
| | | |
| | | |
| ----------------- |
| view1 |
---------------------
| |
| |
| view2 |
| |
| |
| |
---------------------
奇怪的是,一旦我添加了文本并按下了提交(为简单起见,未添加到图表中),view1 会增长到正确的大小,view2 也是如此,但在键入时不会。
我是否需要显式调用 setNeedsUpdateConstraints 或 updateConstraintsIfNeeded?如果有,在哪里?我尝试从文本视图委托 textViewDidChange: 调用它,但没有任何帮助。
任何帮助将不胜感激。
【问题讨论】:
-
您不需要更新约束,因为它们可能不会改变。对象的大小是,但不是约束对象。当视图的内容发生变化时,尝试调用 setNeedsLayout 和 layoutIfNeeded。
-
嗨,詹姆斯,感谢您的回复。不,我尝试从 textViewDidChange 回调中调用 [self.view setNeedsLayout] 和 [self.view layoutIfNeeded] 但它似乎不起作用。我也是这么想的。约束不应该改变,而是视图。 textview 和 view1 之间的约束应该“下推”它,而 view1 和 view2 之间的约束应该缩小 view2 的大小..
-
会不会是 UITextView 实际上没有增长? UITextView 是 UIScrollView 的子类,因此键入可能不会导致 UITextView 的框架需要更改。它可能只是更新表示该文本的 contentSize 和内部视图。
标签: ios objective-c uiview autolayout nslayoutconstraint