使用autolayout调整superview和所有superview的兄弟姐妹的大小

时间:2014-01-08 15:57:16

标签: ios objective-c uiview autolayout nslayoutconstraint

我正在尝试管理屏幕上的视图,以便根据输入的文本增长的文本视图更新所有视图。

在我的控制器视图中,我有两个子视图。我们称之为view1和view2。 View1有一个uitextview子视图,它根据输入的文本不断增长和缩小。

我遇到的问题是view1和view2在输入时不会增长和缩小。从textView的底部开始,垂直间距的约束常量已经从它的superview设置为10px。 view1和view2之间的垂直间距设置为0.以下是视图的直观表示:

 ---------------------
|                     |
|  -----------------  |
| |   UITextView    | |
|  -----------------  |
|        view1        |
 ---------------------
|                     |
|                     |
|                     |
|                     |
|        view2        |
|                     |
|                     |
|                     |
|                     |
|                     |
 ---------------------

我在textView中添加文本时得到的结果是:

 ---------------------
|                     |
|  -----------------  |
| |   UITextView    | |
| |                 | |
| |                 | |
 ---------------------
|                     |
|                     |
|                     |
|                     |
|        view2        |
|                     |
|                     |
|                     |
|                     |
|                     |
 ---------------------

但是,期望的行为将是:

 ---------------------
|                     |
|  -----------------  |
| |   UITextView    | |
| |                 | |
| |                 | |
| |                 | |
| |                 | |
| |                 | |
|  -----------------  |
|        view1        |
 ---------------------
|                     |
|                     |
|        view2        |
|                     |
|                     |
|                     |
 ---------------------

奇怪的是,一旦我添加了文本并按下了提交(为了简单起见未添加到图表中),view1增长到正确的大小,就像view2一样,但不是在输入时。

我是否需要显式调用setNeedsUpdateConstraints或updateConstraintsIfNeeded?如果是的话,在哪里?我试过从文本视图委托textViewDidChange调用它:但没有任何帮助。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

我设法解决了这个问题。

对于有同样问题阅读本文的人来说,我这样做的方法是编写自己的UITextView子类,给它一个高度约束和一些委托方法。

更改文本视图的高度时,只需触发委托方法(例如textViewDidChangeHeight :)即可。然后,在委托回调实现中,我只是在视图上调用了sizeToFit。