根据内容展开 UITextView

Expand UITextView based on its content

我正在尝试扩展我的 UITextView 以根据其内容更改框架。

textView 应在其中的文本变大时调整其高度,并在用户删除文本时调整其高度。

我尝试了很多答案,但都没有用。

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

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

备注:
expandingTextView: UITextView.
textContainer: NSTextContainer 是 expandingTextView 中文本的边界。
heightTracksTextView: Bool 如果为true,接收者将根据expandingTextView 的高度调整其高度。

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

在自动布局下,对 UITextView 使用 invalidateIntrinsicContentSize()

func viewDidLoad(){
    textView.delegate = self;
    textView.isScrollEnabled = false;
}

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