根据内容扩展UITextView的大小

5

我想要扩展我的UITextView,根据其内容更改框架。

当文本变得更多时,textView应该调整其高度,当用户删除文本时则缩小。

我尝试了许多答案,但都没有成功。

2个回答

17

使用下面两行代码是最佳答案,它解决了我的问题:

expandingTextView.textContainer.heightTracksTextView = true
expandingTextView.isScrollEnabled = false

注意:
expandingTextView: UITextView是可扩展的文本视图。
textContainer: NSTextContainer 是扩展文本视图内部文本的边界。
heightTracksTextView: Bool 如果为true,接收者将根据expandingTextView的高度调整其高度。

为了使扩展工作,您需要通过以下方法禁用textView滚动:
isScrollEnabled = false


这对iOS 11.4有效吗?我已经通过编程将UITextView添加到UIViewControllerview中。我尝试使用自动布局和不使用(仅通过设置其框架)来定位它。在两种情况下,将其isScrollEnabled属性设置为false并不能使其高度随着我的输入而扩展。我错过了什么? - ma11hew28
9
为了让这个功能起作用,我需要将我的文本视图的高度约束的“优先级(priority)”设置为.defaultLow - ma11hew28
我没有看到设置 heightTracksTextView = true 会有什么不同。我猜它应该是在文本视图的高度改变时使文本容器调整其高度,但也许这已经发生了,或者文本容器的高度是无关紧要的? - ma11hew28
2
@ma11hew28,你的评论真的救了我!我认为它应该被突出显示! - Aly Yakan
@AlyYakan,我很高兴我的评论对你有帮助。 :-) - ma11hew28

0
在自动布局下,使用invalidateIntrinsicContentSize()来更新UITextView的内在内容大小。
func viewDidLoad(){
    textView.delegate = self;
    textView.isScrollEnabled = false;
}

extension Chat:UITextViewDelegate {
  func textViewDidChange(_ textView: UITextView) {
    textView.invalidateIntrinsicContentSize();
  }
} 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接