【问题标题】:Force redraw as resizing NSTableColumn in NSTableView?在 NSTableView 中强制重绘为调整 NSTableColumn 的大小?
【发布时间】:2011-01-22 10:52:52
【问题描述】:

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

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

【问题讨论】:

    标签: objective-c cocoa macos nstableview


    【解决方案1】:

    查看NSTableViewmethodnoteHeightOfRowsWithIndexesChanged:。您需要为高度已更改的行创建一个 NSIndexSet。

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

    【讨论】:

    • 我试过了,因为我在文档中看到了它,但我不能从- (CGFloat)tableView:(NSTableView *)tableView heightOfRow:(NSInteger)row 内部调用它,因为它会导致无限循环。
    • 我尝试从自定义列的 setWidth: 覆盖内部调用 noteHeightOfRowsWithIndexesChanged:setNeedsDisplay,但它们都没有产生任何影响。你现在具体说什么应该在setWidth: 上完成?可以使这更容易的是,在我的应用程序中,当一行的高度发生变化时,它们通常都会这样做。可以假设。
    【解决方案2】:

    这可能不是唯一的方法,但给 table view 一个 Core Animation 层修复了它。它不是 100% 流畅,但普通用户可能永远不会注意到。

    【讨论】:

      猜你喜欢
      • 2020-07-05
      • 1970-01-01
      • 2012-11-06
      • 1970-01-01
      • 2011-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-21
      相关资源
      最近更新 更多