如何在基于视图的NSTableView或NSOutlineView中自动调整列大小

6
需要支持“基于视图”的表格的列自适应大小请求,需要什么?文档在这一点上真的不清楚,并且似乎只涉及基于单元格的视图。
此功能用于处理对列分隔符的双击。
可以通过为 NSTableView 实现 tableView:sizeToFitWidthOfColumn:,并为 NSOutlineView 实现 outlineView:sizeToFitWidthOfColumn:来实现此功能,但文档说这仅适用于大型表格。是否有更“正确”的方法来做到这一点?
- (CGFloat)tableView:(NSTableView*)tableView sizeToFitWidthOfColumn:(NSInteger)column {
  NSUInteger n = [self numberOfRowsInTableView:tableView];
  CGFloat w = 30;
  NSTableColumn* col = [[tableView tableColumns] objectAtIndex:column];
  for (int i=0; i<MIN(n, 100); ++i) {
    NSView* vw = [self tableView:tableView viewForTableColumn:col row:i];
    w = MAX(w, [vw frame].size.width);
  }
  return w;
}
1个回答

2
我曾经也有同样的疑问。如果你深入了解汇编语言,你会发现负责列自适应功能的框架方法是-[NSTableView _sizeToFitWidthOfColumn:]。不幸的是,它首先检查表视图是否为基于视图的表视图,如果是,则直接跳到该方法的结尾并且什么都不做。
基于视图的表视图是在2009年的OS X 10.6中引入的。可惜,五年后,似乎这个功能仍未被重新实现。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接