Cocoa NSScrollView作为层备份视图错误的子视图?

Cocoa NSScrollView作为层备份视图错误的子视图?,cocoa,core-animation,calayer,nsscrollview,Cocoa,Core Animation,Calayer,Nsscrollview,当我将NSScrollView设置为层备份视图的子视图时(例如,通过从IB中选择NSTextView或NSTableView),我会在滚动视图的文档视图中看到奇怪的绘图行为 为了举例说明,我在一个窗口中创建了一个带有NSTextView的简单项目。我编写的唯一代码是为窗口的内容视图启用层备份: - (void)applicationDidFinishLaunching:(NSNotification *)aNotification { [[self.window contentView]

当我将NSScrollView设置为层备份视图的子视图时(例如,通过从IB中选择NSTextView或NSTableView),我会在滚动视图的文档视图中看到奇怪的绘图行为

为了举例说明,我在一个窗口中创建了一个带有NSTextView的简单项目。我编写的唯一代码是为窗口的内容视图启用层备份:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    [[self.window contentView] setWantsLayer:YES];
}
这是我在textview中键入时的结果。红色下划线没有正确对齐:

此外,当我调整textview的大小时,文本和下划线会抖动很多。当我使用tableview(在scrollview中)而不是textview时,我看到了同样的调整大小抖动


知道发生了什么吗?

NSScrollView在嵌入到层备份视图中时确实表现不好

需要一些严重的技巧来设置包含滚动视图的视图的动画。您可以尝试仅在需要设置动画时启用层背面。然后,您需要强制图形,以避免以空图层结束


但是,通常情况下,你需要更深入地了解这些技巧的背后。即:保持层背衬关闭。将视图绘制到图像中,在启用图层备份的覆盖视图中显示该图像。将该视图设置为最终状态的图像动画。然后删除覆盖视图以显示下面的实际最终状态。

知道这是一个已知问题会很有帮助。这有点令人惊讶。