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