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

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

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

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

解决问题的原因是:
在“视图效果”(最右侧)检查器中,取消选中“窗口”主视图的“核心动画层”.

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

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

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

我知道一些更简单的UI元素是兼容的(例如NSTextField和NSButton).

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

评论者,随时添加到什么是和不兼容的列表.

点赞