kAXVisibleCharacterRangeAttribute未适配顶部栏及滚动问题求助
使用kAXVisibleCharacterRangeAttribute获取文本可见范围的问题与临时方案
问题现象
在通过kAXVisibleCharacterRangeAttribute获取应用内文本的可见范围,用于绘制NSPanel时,遇到以下问题:
- 返回的可见范围未覆盖应用顶部栏区域
- 即使滚动文本使部分内容不可见,该属性仍返回从索引0起始的文本范围,此问题在Microsoft Word中同样存在
原实现代码
原用于获取可见范围的Swift代码如下:
func getVisibleCharacterRange()->CFRange?{ var visibleCharacterRange: AnyObject? let errorType: AXError = AXUIElementCopyAttributeValue( self, kAXVisibleCharacterRangeAttribute as CFString, &visibleCharacterRange ) if(errorType == AXError.success){ let v = visibleCharacterRange as! AXValue precondition(AXValueGetType(v) == .cfRange) var range = CFRange() let done = AXValueGetValue(v, .cfRange, &range) precondition(done) return range } return nil }
临时解决方案
由于kAXVisibleCharacterRangeAttribute存在上述兼容性与准确性问题,可采用以下临时方案:
- 先获取文本区域的初始
CGRect - 监听并跟踪窗口的大小调整、移动事件
- 根据窗口的实时状态,结合文本区域的位置与滚动偏移,计算出实际可见的文本范围
内容的提问来源于stack exchange,提问作者CloudWave
相关产品推荐
相关产品推荐

