【问题标题】:Expand UITextView based on its content根据内容展开 UITextView
【发布时间】:2018-02-18 19:34:53
【问题描述】:

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

当里面的文本变大时,textView 应该调整它的高度,当用户删除文本时,它会变小。

我尝试了很多答案,但没有奏效。

【问题讨论】:

    标签: ios objective-c swift textview uitextview


    【解决方案1】:

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

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

    注意事项:
    expandingTextView: UITextView
    textContainer: NSTextContainer是expandingTextView中文本的边界。
    heightTracksTextView: Bool如果为真,接收方将调整其高度基于扩展的TextView 高度。

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

    【讨论】:

    • 这适用于 iOS 11.4 吗?我以编程方式将UITextView 添加到UIViewControllerview。我试过用自动布局定位它,而不用(只是通过设置它的框架)。在这两种情况下,将其isScrollEnabled 属性设置为false 不会使其高度在我键入时扩展。我错过了什么?
    • 要让它工作,我必须将我的文本视图的高度约束的priority 设置为.defaultLow
    • 我看不出由设置heightTracksTextView = true 引起的差异。我想它应该让文本容器在其文本视图的高度发生变化时调整其高度,但也许无论如何都会发生这种情况,或者文本容器的高度可能无关紧要?
    • @ma11hew28 你的评论真的救了我!!我认为应该突出显示!
    • @AlyYakan,很高兴我的评论对您有所帮助。 :-)
    【解决方案2】:

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

    func viewDidLoad(){
        textView.delegate = self;
        textView.isScrollEnabled = false;
    }
    
    extension Chat:UITextViewDelegate {
      func textViewDidChange(_ textView: UITextView) {
        textView.invalidateIntrinsicContentSize();
      }
    } 
    

    【讨论】:

      猜你喜欢
      • 2011-10-17
      • 1970-01-01
      • 2021-12-20
      • 1970-01-01
      • 1970-01-01
      • 2018-01-13
      • 2018-08-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多