UITextView 的合理替代品(因为自 iOS 7 开始,UITextView 已完全损坏,无法修复)。
在 iOS 7 中,UITextView 完全损坏。错误的数量和严重性超出了这个小 README 的范围,但任何人只要处理过 UITextView 就会知道我的意思。以下是在 iOS 7 中 UITextView 的问题要点:
内容尺寸的内部计算经常出错。显示/隐藏键盘,甚至只需移动光标都可能导致内容尺寸不可解释地改变,有时改变得如此之大使滚动无法正确启用。
在换行时,文本视图将不会保持文本输入光标可见。
使用属性字符串(无论是通过 setAttributedText 还是通过新的 NSTextStorageDelegate 协议)会导致更多的数学错误。返回的 CGRect(来自 caretRectForPosition)在返回正确的矩形之前,可能会从1到5次错误。这意味着,如果您还需要属性字符串,Greg Pierce 真的很聪明的 UITextView gist(GitHub 上的代码)就无法工作。
JTSTextView 除了管理一个私有的 UITextView 子视图之外,本质上就是一个通常的 UIScrollView。这个私有文本视图高度固定(100,000点),因为它的高度帧(frame)始终大于其内容尺寸的高度,所以隐式禁用了滚动。通过使用固定高度和禁用滚动,这绕过了所有会破坏 UITextView 的不良数学计算。
为了使 JTSTextView 有用,它提供了一组公开的属性和方法,用于模拟真正的 UITextView 的属性、方法和委托协议。
要使用 JTSTextView,您应该基本上可以替换掉所有的 UITextView 代码。有一些差异,但总体上它 “ Just Works”。
很高兴你提到了这一点。JTSTextView所使用的技巧意味着它 无法 支持超长的文本串(例如超长的博客文章)。但对于像电子邮件客户端、Twitter客户端、App.net客户端等,10万个点空间可能已经足够了。如果你敢冒险,可以尝试将其大小修改为100万个或更多。我不知道性能会有什么影响,但让我知道。
哦对了:JTSTextView还会根据键盘的可见性变化自动管理其底部内容的内边距。终于!如果你不想要这个功能,只需将automaticallyAdjustsContentInsetForKeyboard
设置为NO即可。