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