5

按钮后面什么都没有 表已加载 后面有表格的按钮

1) 按钮后面没有表格 2) 表格已加载 3) 滚动后

如果我在 NSTableView 上放置一个按钮,我会在滚动后留下工件。有谁知道如何解决这一问题?

我目前的解决方案是将带有表格的部分分成 2 部分。下部是背景中的禁用按钮。

我现在的解决方案

4

3 回答 3

1

试试 NSScrollView 方法 - (void)addFloatingSubview:(NSView *)view forAxis:(NSEventGestureAxis)axis 所有的 tableviews 通常都应该在一个 ScrollView 里面。

于 2014-03-04T16:42:43.233 回答
0

我有一个类似的问题并解决了它,请参阅Why does an NSTextField leave artifacts over an NSTableView when the table scrolls? . 本质上,OSX 将绘制表格的内容并让父滚动视图移动缓存的内容,从而避免重绘以提高性能。通过子类化父滚动视图,可以强制刷新挂钩该reflectScrolledClipView:方法的表。然后整个表格,包括覆盖,将在每次滚动时重新绘制。

于 2014-03-04T12:51:55.927 回答
0

这是因为滚动视图设置为在滚动时复制其内容,并且仅重绘新发现的部分作为性能优化。要关闭它,请使用

myTableView.enclosingScrollView.contentView.copiesOnScroll = NO;

尽管这会使滚动使用更多 CPU(您也可以在 XIB 中执行此操作,查找“滚动时复制”复选框)。

可能更好的方法是切换滚动视图和按钮以支持图层:

myTableView.enclosingScrollView.wantsLayer = YES;
myButtonView.wantsLayer = YES;

(同样,您可以在 XIB 文件的“图层”检查器中设置此项,您可以在其中单击每个视图旁边的复选框以为其赋予一个图层)现在,滚动视图将仅从其自己的图层复制内容(没有不再包括您的按钮)。此外,现在文本视图的所有合成都将在显卡中完成。这适用于不透明按钮,但是,如果您将文本放在其自己图层中的透明背景上(例如,如果您有一个带标题的透明按钮),您将失去亚像素抗锯齿。

于 2014-03-04T17:00:40.383 回答