【问题标题】:Make sure NSTrackingArea refreshed in Nested NSScrollViews确保在嵌套的 NSScrollViews 中刷新 NSTrackingArea
【发布时间】: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


【解决方案1】:

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

NSScrollView inside another NSScrollView

【讨论】:

    猜你喜欢
    • 2014-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-19
    • 2017-03-11
    相关资源
    最近更新 更多