强制重绘在NSTableView中调整NSTableColumn的大小?

时间:2010-12-29 21:50:43

标签: objective-c cocoa macos nstableview

我在NSTableView的委托中实现了- (CGFloat)tableView:(NSTableView *)tableView heightOfRow:(NSInteger)row,以便在最左边列的宽度发生变化时调整表格行的高度。问题是在调整大小期间(以及在调整大小期间滑入视图的任何列)只会重绘该列。

这会在调整大小后产生下面的时髦视觉效果。我想要的是一种在用户调整列大小时告诉表视图完全重绘的方法。现在,我能够做的最多就是在该列完成大小调整后调用setNeedsDisplay

alt text

2 个答案:

答案 0 :(得分:2)

查看NSTableView method noteHeightOfRowsWithIndexesChanged:。您需要为高度已更改的行创建NSIndexSet。

<强>更新 为了有一个安全的地方来调用它,你可以继承NSTableColumn以覆盖setWidth:方法。然后,您可以发布表委托可以观察到的自定义通知,或者您也可以覆盖表视图并让列告诉表直接告诉其委托。

答案 1 :(得分:1)

这可能不是唯一的方法,但给表视图核心动画层修复了它。它不是100%平滑,但普通用户可能永远不会注意到。