公司的App有一些UGC(User Generate Content)内容,势必要用到苹果的UITextView控件。最近碰到这么个问题,在一次性粘贴大量的文本后,UITextView中会出现空白,通过界面调试发现,其contentView的size已经和本体的size差距非常大了,从而导致了显示真空。
最开始解决的方法是,在粘贴之后,强制设置其contentOffset,因为是继承自UIScrollView的,带来的新问题是,总是在粘贴之后滚动,体验非常之不友好。终极的解决方法是:UITextView中有一个- (void)scrollRangeToVisible:(NSRange)range;
方法。对此方法苹果的开发文档释义为:
Scrolls the receiver in its enclosing scroll view so the first characters of aRange are visible.
大概意思就是在内部滚动,使range处的第一个字符可见。
所以,继承系统的UITextView,添加一个UIMenuControllerDidHideMenuNotification
通知,点击粘贴后菜单栏隐藏会发送通知,收到通知后,将range设置在(0, self.text.length)处即可。烦人的空白和滚动就跑到九霄云外了。