动态布局,启用滚动的UITextView的自动布局问题

时间:2018-06-19 15:32:06

标签: uikit ios-autolayout

这就是我想要的:

+-------------------------+   +-------------------------+
| +---------------------+ |   | +---------------------+ |
| |        UILabel      | |   | |        UILabel      | |
| +---------------------+ |   | +---------------------+ |
|                         |   |                         |
| +---------------------+ |   | +---------------------+ |
| | UITextView; height  | |   | | UITextView; height || |
| | depends on content  | |   | | depends on content || |
| +---------------------+ |   | | This one here has  || |
|                         |   | | so much text that   | |
| +---------------------+ |   | | the complete text   | |
| |       UIButton      | |   | | can only be seen by | |
| +---------------------+ |   | | scrolling: Text Te… | |
|                         |   | +---------------------+ |
|                         |   |                         |
|                         |   | +---------------------+ |
|                         |   | |       UIButton      | |
|                         |   | +---------------------+ |
+-------------------------+   +-------------------------+

所有元素都生活在普通的UIView上。

UILabel和UIButton具有固定的高度。 UITextView仅应与其内容一样高。即使是非常长的文本,其高度也绝不能将以下元素推离屏幕。

到目前为止我所拥有的:

  • UILabel的顶部被限制为其超级视图的顶部(= 0)
  • UITextView的顶部限于UILabel的底部(= 0)
  • UIButton的顶部限于UITextView的底部(= 0)
  • UIButton的底部限于其超级视图的底部(> = 0)
  • UITextView已启用滚动
  • UITextView设置了固有高度
  • UITextView内容压缩阻力:1000
  • UITextView内容拥抱优先级:1

使用此设置后,UITextView完全不会显示。如果我为UITextView设置了最小高度,则以该高度显示该高度,但是该高度不会适应内容。如果禁用滚动,则将适当调整UITextView的高度。

我可以使用内容识别滚动UITextView吗?可以通过AutoLayout完成吗?如果是,怎么办?

1 个答案:

答案 0 :(得分:0)

不幸的是,没有以您想要的方式启用/禁用UITextView滚动的“自动”方法。

一种选择是确定文本视图的最大高度,然后使用观察器来监视文本视图的contentSize中的更改。当contentSize高度超过您的最大高度时,启用滚动。有关其他详细信息,请参见此答案(以及指向示例项目的链接):Expanding UITextView inside a Stack View with scrolling enabled

另一种选择是将非滚动UITextView嵌入可滚动的UIScrollView中。技巧是将滚动视图的高度限制为文本视图的高度,但将其优先级设置为250。将所有其他约束设置为正常。滚动视图的高度将随着文本视图的高度变化而扩展,但其他约束条件将对其进行限制,以使其不会持续增长。