1) 按钮后面没有表格 2) 表格已加载 3) 滚动后
如果我在 NSTableView 上放置一个按钮,我会在滚动后留下工件。有谁知道如何解决这一问题?
我目前的解决方案是将带有表格的部分分成 2 部分。下部是背景中的禁用按钮。
1) 按钮后面没有表格 2) 表格已加载 3) 滚动后
如果我在 NSTableView 上放置一个按钮,我会在滚动后留下工件。有谁知道如何解决这一问题?
我目前的解决方案是将带有表格的部分分成 2 部分。下部是背景中的禁用按钮。
试试 NSScrollView 方法
- (void)addFloatingSubview:(NSView *)view forAxis:(NSEventGestureAxis)axis
所有的 tableviews 通常都应该在一个 ScrollView 里面。
我有一个类似的问题并解决了它,请参阅Why does an NSTextField leave artifacts over an NSTableView when the table scrolls? . 本质上,OSX 将绘制表格的内容并让父滚动视图移动缓存的内容,从而避免重绘以提高性能。通过子类化父滚动视图,可以强制刷新挂钩该reflectScrolledClipView:
方法的表。然后整个表格,包括覆盖,将在每次滚动时重新绘制。
这是因为滚动视图设置为在滚动时复制其内容,并且仅重绘新发现的部分作为性能优化。要关闭它,请使用
myTableView.enclosingScrollView.contentView.copiesOnScroll = NO;
尽管这会使滚动使用更多 CPU(您也可以在 XIB 中执行此操作,查找“滚动时复制”复选框)。
可能更好的方法是切换滚动视图和按钮以支持图层:
myTableView.enclosingScrollView.wantsLayer = YES;
myButtonView.wantsLayer = YES;
(同样,您可以在 XIB 文件的“图层”检查器中设置此项,您可以在其中单击每个视图旁边的复选框以为其赋予一个图层)现在,滚动视图将仅从其自己的图层复制内容(没有不再包括您的按钮)。此外,现在文本视图的所有合成都将在显卡中完成。这适用于不透明按钮,但是,如果您将文本放在其自己图层中的透明背景上(例如,如果您有一个带标题的透明按钮),您将失去亚像素抗锯齿。