NSTextView 和确定字形位置
NSTextView and determining glyph position
我正在尝试为某些行定义 y 轴位置,并在 NSTextView 中在它们旁边添加标签。我正在使用 glyphRangeForCharacterRange。
有点效果,但文本视图可以包含大量文本(甚至约 4000-5000 行)并用插图包裹。当我滚动到看不见的东西时,结果是错误的。似乎 return 没有换行的值,或者我认为。如果我在滚动到相应文本时对位置进行更新,则会正确计算它们。
这是没有额外偏移的代码:
NSRange characterRange = NSMakeRange(startPosition, length);
NSRange range = [[self.textView layoutManager] glyphRangeForCharacterRange:characterRange actualCharacterRange:nil];
label.frame = rect;
NSRect rect = [[self.textView layoutManager] boundingRectForGlyphRange:range inTextContainer:[self.textView textContainer]];
如果我尝试在文档唤醒后设置标签位置,也会出现同样的问题,所以我在第一次按键时计算标签,这不太好。
最好的解决方法是什么?
编辑
这个问题的答案只是在检索字形坐标之前确保 NSLayoutManager 的布局。
[[_textView layoutManager] ensureLayoutForTextContainer:[_textView textContainer]];
我正在尝试为某些行定义 y 轴位置,并在 NSTextView 中在它们旁边添加标签。我正在使用 glyphRangeForCharacterRange。
有点效果,但文本视图可以包含大量文本(甚至约 4000-5000 行)并用插图包裹。当我滚动到看不见的东西时,结果是错误的。似乎 return 没有换行的值,或者我认为。如果我在滚动到相应文本时对位置进行更新,则会正确计算它们。
这是没有额外偏移的代码:
NSRange characterRange = NSMakeRange(startPosition, length);
NSRange range = [[self.textView layoutManager] glyphRangeForCharacterRange:characterRange actualCharacterRange:nil];
label.frame = rect;
NSRect rect = [[self.textView layoutManager] boundingRectForGlyphRange:range inTextContainer:[self.textView textContainer]];
如果我尝试在文档唤醒后设置标签位置,也会出现同样的问题,所以我在第一次按键时计算标签,这不太好。
最好的解决方法是什么?
编辑
这个问题的答案只是在检索字形坐标之前确保 NSLayoutManager 的布局。
[[_textView layoutManager] ensureLayoutForTextContainer:[_textView textContainer]];