【发布时间】:2018-12-12 16:07:34
【问题描述】:
我在 NSScrollView 中有一个 NSCollectionView。 滚动视图水平滚动以沿项目行移动。 每个集合项内部都有一个垂直滚动的 NSOutlineView。
我有用于打开和关闭集合项的 NSButton 对象 - 作为我集合中的补充视图。 我在这些按钮上设置了 NSTrackingAreas 以支持鼠标悬停效果。
这可以正常工作,直到我滚动,此时 NSTrackingArea 区域明显被留下(当鼠标位于按钮所在的位置时,鼠标悬停效果发生,而不是它所在的位置)。
我在按钮类的 updateTrackingAreas 中重建了我的跟踪区域,这被调用了,但不够频繁。
我在设置跟踪区域时尝试使用 .inVisibleRect,而不是显式重建它们,但这并不能改善跟踪更新。
当滚动发生时,我尝试在 NSCollectionView 上调用 updateTrackingAreas,但它从未像我预期的那样传递给子视图。
作为旁注,我的集合视图项中也有 NSTextViews,其工具提示也是 very flakey。他们经常被挂着。指向链接上的手形光标经常错位。
感觉好像默认的 updateTrackingArea 被过度优化了,并且没有像应有的那样频繁调用。
因此,我将着手构建自己的跟踪区域跟踪器,以在默认情况下未更新视图时注册和更新我的视图...
...但也许有人可以看到我遗漏的明显东西?谢谢。
【问题讨论】:
-
更多测试 - NSTextView 链接上的工具提示确实与滚动后的按钮跟踪区域具有相同的偏移量。
-
好吧,这似乎比我想象的还要糟糕,因为确保在滚动时重新创建跟踪区域仍然不能解决问题。视图的边界似乎没有正确地使用父视图进行转换。
-
这里似乎发现了类似的问题:cocoa-dev.apple.narkive.com/aL6UaipM/…
-
我的测试项目工作正常。我们如何重现该问题?
-
非常感谢您测试 Willeke。有趣的是,这一切都适用于你。你用的是什么布局?我有一个 NSCollectionViewFlowLayout 的子类。我可以尝试剥离我的项目以找出问题所在。有趣的是,我的收藏品中有 NSOutlineViews。如果我对它们执行垂直滚动,跟踪区域的位置都会正确重置。也许我的滚轮过滤在某处破坏了某些东西......
标签: macos cocoa appkit nsscrollview nstrackingarea