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

时间:2014-02-21 19:02:43

标签: objective-c cocoa nstableview nsoutlineview

支持基于视图的表的列自动调整大小请求需要什么?在这一点上,文档真的不清楚,似乎与基于细胞的观点有关。

这是为了处理列分隔符的双击。

我可以通过为tableView:sizeToFitWidthOfColumn:实施NSTableViewoutlineView:sizeToFitWidthOfColumn:实施NSOutlineView来完成这项工作,但文档说这只适用于大型表格。是否有更多正确的方法来执行此操作?

- (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 个答案:

答案 0 :(得分:2)

我想知道同样的事情。如果你在程序集中进行一些挖掘,你会发现负责列自动调整功能的框架方法是-[NSTableView _sizeToFitWidthOfColumn:]。不幸的是,它做的第一件事是检查表视图是否是基于视图的表视图,如果是这样,它只是跳转到方法的末尾并且什么都不做。

2009年OS X 10.6中引入了基于视图的表视图。唉,五年之后,它看起来仍然没有重新实现。