- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 NSTextView
子类作为 NSSplitViewController
中的右侧项目,左侧面板是一个 NSOutlineView
。为了在 TextView 中按下命令键时处理鼠标单击,我添加了以下内容来查找鼠标下方的字形:
override func mouseDown(with event: NSEvent) {
guard
let lm = self.layoutManager,
let tc = self.textContainer
else { return }
let localMousePosition = convert(event.locationInWindow, to: nil)
var partial = CGFloat(1.0)
let glyphIndex = lm.glyphIndex(for: localMousePosition, in: tc, fractionOfDistanceThroughGlyph: &partial)
print(glyphIndex)
}
但是,这会导致索引过高,大约为 10 左右,从而选择了错误的字形。我的 TextView 只有等宽字符,因此偏移不是由额外的字形引起的。
有趣的是,如果我折叠左侧面板(在代码或 Storyboard中),我会得到正确的索引。但x方向的偏移量大于左面板的宽度。
我在这里缺少什么,上面的代码有错误吗?
最佳答案
根据上面 @Willeke 的评论,我对代码进行了以下更改:
localMousePosition = convert(event.locationInWindow, from: nil)
if enclosingScrollView?.frame.width == window?.frame.width {
// left panel is collapsed, so use convert: to:
localMousePosition = convert(event.locationInWindow, to: nil)
}
似乎有效。
问题是我也在 mouseMoved
中使用 localMousePosition = Convert(event.locationInWindow, to: nil)
(localMousePosition
是 View 的属性)。将其更改为 localMousePosition = Convert(event.locationInWindow, from: nil)
使一切正常。再次感谢 @Willeke 指出了这一点。
关于swift - NSLayoutManager 在 NSTextView 中为 mousePosition 返回错误的 glyphIndex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54610163/
我有一个 NSTextView 子类作为 NSSplitViewController 中的右侧项目,左侧面板是一个 NSOutlineView。为了在 TextView 中按下命令键时处理鼠标单击
我是一名优秀的程序员,十分优秀!