【问题标题】:NSTableView redraw not updating display, selection stickingNSTableView 重绘不更新显示,选择粘贴
【发布时间】:2011-07-10 02:03:02
【问题描述】:

虽然我知道这个问题的解决方案,但如果有人可以向我解释这个解决方案,我很感兴趣。我也想把它拿出来,因为我在网上找不到任何关于这个问题的提及,而且我花了几天时间才找到了几个小时。我有一个 NSTableView 在重绘及其选择方面表现得很奇怪。问题如下:

表格内容淡入,而不是在它出现在屏幕上时立即出现。滚动内容时,新出现的行也会淡入。当您进行选择(单个或多个)并将其滚动到屏幕外,然后进行另一个选择(应该替换,而不是添加到第一个选择)时,第一个选择未正确清除。如果您滚动回它,它仍然存在,除了您的新选择。这是显示更新问题,而不是选择问题 - 即您的新选择有效,只是显示错误。

我通过我绑定的 NSArrayController、底层数组、排序、所有连接和设置等来跟踪这一点,但这一切都与它无关。

解决问题的是: 在 View Effects (right-most) Inspector 中,取消选中 Window 主视图的“Core Animation Layer”。

谁能解释这里发生了什么,也许可以改进解决方案?

【问题讨论】:

  • 对于它的价值,这已被报告为一个错误:openradar.appspot.com/9709500
  • 有趣 - 这表明滚动视图是问题的原因 - 即它没有要求表格视图刷新它在屏幕矩形上。

标签: cocoa core-animation nstableview nsscrollview


【解决方案1】:

看起来 Core Animation 和 NSTableView 相处得不太好。 “褪色”效果是核心动画工作方式的副产品。当您在一个视图中有核心动画时,它也会在该视图的所有子视图中启用。

除非绝对必要,否则我不建议在 Mac 上使用核心动画,因为某些界面元素(例如 NSTextViewNSTableView)与它不兼容。 iOS 对表格视图等使用核心动画有更好的支持,主要是因为它在设计时就考虑了核心动画。

我知道一些更简单的 UI 元素是兼容的(例如NSTextFieldNSButton)。

如果您绝对需要在窗口的其余部分中使用核心动画,请将所有其他视图放在内容视图的子视图中,同时将表格视图直接留在内容视图中。然后,您可以在另一个视图中启用 Core Animation。

评论者,请随意添加到兼容和不兼容的列表中。

【讨论】:

  • 谢谢。在窗口的其他部分使用核心动画的好技巧。不太相关,但是:我有 NSProgressIndicators 作为表格的子视图。幸运的是,没有核心动画不会影响它们。我接受这个答案,但如果您有更多信息,其他人请回答/评论,因为这似乎没有在其他任何地方记录。 (或者也许是?)
猜你喜欢
  • 2013-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-12
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
相关资源
最近更新 更多