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

jeb*_*rle 6 cocoa objective-c nsoutlineview nstableview

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

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

我可以通过实现tableView:sizeToFitWidthOfColumn:a NSTableViewoutlineView:sizeToFitWidthOfColumn:for 来实现这项工作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;
}
Run Code Online (Sandbox Code Playgroud)

Cod*_*ins 2

我也在想同样的事情。如果您在程序集中进行一些挖掘,您\xe2\x80\x99将发现负责列自动调整大小功能的框架方法是-[NSTableView _sizeToFitWidthOfColumn:]。不幸的是,它所做的第一件事是检查表视图是否是基于视图的表视图,如果是,它只是跳转到方法的末尾并且绝对不执行任何操作。

\n\n

基于视图的表视图于 2009 年在 OS X 10.6 中引入。唉,五年后,看起来这个功能仍然没有\xe2\x80\x99 被重新实现。

\n