【发布时间】:2015-08-27 15:02:49
【问题描述】:
我有一个 UITextView,我正在向其中添加一些自定义 UI。此自定义 UI 的布局基于 UITextView 中文本的位置。
我在 UITextView 上使用firstRectForRange 方法(来自 UITextInput)。该方法返回textView中指定文本范围的frame。
但是,在设置属性文本后,它不能正常工作。在返回预期值之前需要最少的时间。这段时间很可能是直到带有更新文本的第一帧被渲染并显示在屏幕上的时间。
我目前正在将用于布置自定义 UI 的代码包装到 dispatch_async(dispatch_get_main_queue(), ...) 块中,这会将其执行延迟到帧渲染之后(大约 9 毫秒)。
UITextView 在设置属性字符串和在屏幕上显示下一帧之间做了什么?
有没有更好的地方/方法调用让我挂钩?
我有什么方法可以强制同步运行该操作?
我尝试调用的内容:
(设置属性文本后;调用 firstRectForRange 之前)
- 在
firstRectForRange之前调用setNeedsLayout和layoutIfNeeded。 - 致电
drawViewHierarchyInRect(self.bounds, afterScreenUpdates: true)
【问题讨论】:
标签: ios uitextview uitextinput