确保在嵌套的NSScrollViews中刷新了NSTrackingArea

时间:2018-12-12 16:07:34

标签: macos cocoa appkit nsscrollview nstrackingarea

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

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

这正常工作,直到我滚动为止,此时NSTrackingArea区域明显被留下了(鼠标悬停效果是在鼠标位于按钮所在的位置而不是按钮所在的位置发生的。)

我在我的按钮类的updateTrackingAreas中重建跟踪区域,这被称为,但并不足够。

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

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

作为旁注,我的收藏夹视图项中也有NSTextViews,其工具提示也是 flakey。他们经常被吊死。将光标指向链接上的光标通常未对齐。

感觉默认的updateTrackingArea似乎过分优化,并且没有被频繁调用。

因此,我将着手构建自己的跟踪区域跟踪器,以在默认情况下未更新视图时注册和更新视图。

...但是也许有人可以看到我显然想念的东西?谢谢。

1 个答案:

答案 0 :(得分:0)

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

NSScrollView inside another NSScrollView