NSTableView重绘不会更新显示,选择粘贴

时间:2011-07-10 02:03:03

标签: cocoa core-animation nstableview nsscrollview

虽然我知道这个问题的解决方案,但我感兴趣的是有人可以向我解释这个解决方案。我也希望在那里得到这个,因为我在网上找不到任何关于这个问题的提醒,我花了好几个小时来追踪。我有一个NSTableView在重绘和选择方面表现得很奇怪。问题看起来像这样:

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

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

解决问题的原因是: 在View Effects(最右侧)检查器中,取消选中Window主视图的“Core Animation Layer”。

任何人都可以解释这里发生的事情,也许可以改进解决方案吗?

1 个答案:

答案 0 :(得分:2)

看起来Core Animation和NSTableView并没有那么顺利。 “褪色”效应是核心动画运作方式的副产品。当您在一个视图中拥有核心动画时,它也会在所有视图的子视图中启用。

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

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

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

评论者可以随意添加到哪些内容中,哪些内容不兼容。