确保 NSTrackingArea 在 Nested NSScrollViews 中刷新

Make sure NSTrackingArea refreshed in Nested NSScrollViews

我在 NSScrollView 中有一个 NSCollectionView。 滚动视图水平滚动以沿项目行移动。 在每个 collection 项目中都有一个垂直滚动的 NSOutlineView。

我有 NSButton objects 用于打开和关闭 collection 项 - 作为我 collection 中的补充视图。 我在这些按钮上设置了 NSTrackingAreas 以支持鼠标悬停效果。

这可以正常工作,直到我滚动,此时 NSTrackingArea 区域明显落在后面(鼠标悬停效果发生在鼠标位于按钮所在的位置,而不是按钮所在的位置)。

我在我的按钮 class 的 updateTrackingAreas 中重建我的跟踪区域,这被调用,但不够频繁。

我在设置跟踪区域时尝试使用 .inVisibleRect,而不是显式重建它们,但这并没有改进跟踪更新。

我尝试在发生滚动时在 NSCollectionView 上调用 updateTrackingAreas,但它从未像我预期的那样传递到 child 视图。

附带说明一下,我的 collection 视图项中也有 NSTextViews,其工具提示也 非常 古怪。他们经常被悬空。指向链接的手形光标经常错位。

感觉好像默认的 updateTrackingArea 是 over-optimised 并且没有像它应该的那样经常被调用。

因此,我即将着手构建自己的 tracking-area-tracker 以在默认情况下未更新时注册和更新我的视图...

...但也许有人能看出我遗漏了什么?谢谢。

当错误地嵌套滚动视图时,跟踪区域设置可能会被巧妙地破坏。有关详细信息,请参阅此处有关嵌套滚动视图的答案:

NSScrollView inside another NSScrollView