粘贴长文本时UITextView动态高度滚动不起作用

Posted

技术标签:

【中文标题】粘贴长文本时UITextView动态高度滚动不起作用【英文标题】:UITextView dynamic height scrolling doesn't work when long text is pasted 【发布时间】:2019-09-18 16:02:20 【问题描述】:

我已经实现了当高度达到某个值时动态更改UITextView的高度,遵循这个解决方案https://***.com/a/38454252/12006517

这很好用,但是当我第一次在其中粘贴大量文本时,文本视图会冻结。粘贴大块文本后,它不会到达文本内容的末尾,并且光标在文本视图冻结时消失。我必须按删除键并开始输入,然后它开始正常工作。

大量文本作品的后续粘贴。所以问题只会在第一次粘贴时发生。

我该如何解决这个问题?

 class MyViewController: UIViewController 
    let messageTextViewMaxHeight: CGFloat = 200
 

 extension MyViewController: UITextViewDelegate 

    func textViewDidChange(_ textView: UITextView) 

        if textView.contentSize.height >= self.messageTextViewMaxHeight 
            textView.isScrollEnabled = true
         else 
            textView.frame.size.height = textView.contentSize.height
        

    

 

【问题讨论】:

【参考方案1】:

你可以试试下面的代码。它工作正常。

func textViewDidChange(_ textView: UITextView) 

    let sizeThatShouldFitTheContent = textView.sizeThatFits(textView.frame.size)
    if sizeThatShouldFitTheContent.height  > 120 
        textView.isScrollEnabled = true
    else
        textView.isScrollEnabled = false
    

【讨论】:

以上是关于粘贴长文本时UITextView动态高度滚动不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何动态调整 UITextView 的高度

将字符串粘贴到 uitextview 中的文本底部时会添加额外的空间

如何仅在 UITextView 上强制水平滚动

xcode 6无法滚动长的uitextview

UITextView 在分页 UIScrollView 内滚动不起作用

UITextView 使用自动布局动态扩展为滚动视图内的文本