- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
根据Apple's documentation on [NSTableViewDelegate tableView:sizeToFitWidthOfColumn:]
:
By default, NSTableView iterates every row in the table, accesses a cell via preparedCellAtColumn:row:, and requests the cellSize to find the appropriate largest width to use.
For accurate results and performance, it’s recommended that this method is implemented when using large tables. By default, large tables use a monte carlo simulation instead of iterating every row.
这个默认行为正是我想要的,所以我选择不在我的 NSTableViewDelegate 中实现这个方法。但是,当我双击列的调整大小分隔线时,没有任何反应。我的表格 View 是基于 View 的。
最佳答案
从 OS X 10.10.2 开始,双击列分隔符时,基于 View 的表格 View 中的列仍然不会自动调整大小。
我实现了委托(delegate)来采样可见矩形的行以及下方和上方的 50 行。
- (CGFloat)tableView:(NSTableView *)tableView sizeToFitWidthOfColumn:(NSInteger)column
{
// Note: Called on double-click of table columns separator
// Note: As of 10.10.2, [NSTableView _sizeToFitWidthOfColumn] does nothing for view-based table views
NSRect visibleRect = tableView.visibleRect;
NSRange rowRange = [tableView rowsInRect:visibleRect];
NSUInteger numberOfRows = tableView.numberOfRows;
NSInteger minRow = rowRange.location;
NSInteger maxRow = rowRange.location + rowRange.length;
minRow = MAX(0, minRow - 50);
maxRow = MIN(numberOfRows, maxRow + 50);
NSTableColumn *tableColumn = [[tableView tableColumns] objectAtIndex:column];
CGFloat minWidth = tableColumn.minWidth;
CGFloat maxWidth = tableColumn.maxWidth;
CGFloat width = minWidth;
/*
NSCell *headerCell = tableColumn.headerCell;
if ([headerCell isKindOfClass:[NSCell class]]) {
NSRect bounds = NSMakeRect(0.0f, 0.0f, maxWidth, headerCell.cellSize.height);
CGFloat fittingWidth = [headerCell cellSizeForBounds:bounds].width;
if (fittingWidth > width) {
width = fittingWidth;
}
}
*/
for (NSInteger row = minRow; row < maxRow; row++) {
NSTableCellView *tableCellView = [tableView viewAtColumn:column row:row makeIfNecessary:YES];
CGFloat fittingWidth = [tableCellView fittingSize].width;
if (fittingWidth > width) {
width = fittingWidth;
if (width >= maxWidth) {
break;
}
}
}
return MIN(maxWidth, width);
}
关于objective-c - 默认[NSTableViewDelegate tableView :sizeToFitWidthOfColumn:] doesn't get called,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26941266/
我有一个基于 View 的 NSTableView,其数据由 NSArrayController 的子类提供。数组 Controller 还从其他对象接收通知它更新的 NSNotifications(
我的 cocoa 框架存在架构问题。 所以问题是,在我的应用程序中,我有一个包含 2 个 subview 的 MasterView: RecentFilesTableView 其中包含用户最近使用的文
我想用一些自定义方法扩展 NSTableViewDelegate 协议(protocol)。例如,我希望我的自定义 NSTableView 子类通知代理某些特定事件。是否可以不创建另一个协议(prot
应该实现什么方法? 我尝试将 TableDataSource 设置为 TableView 的委托(delegate),但未调用委托(delegate)方法。之后,我尝试在代码中将“TableDataS
根据Apple's documentation on [NSTableViewDelegate tableView:sizeToFitWidthOfColumn:] : By default, NST
我有 2 个表,其委托(delegate)是同一个对象。正在努力解决如何适应这种情况的语法。我让其他委托(delegate)方法正常工作,因为它们正在传递 NSTableView 对象。 最受赞赏的例
我有一个 NSView,“CurrentActionsView”,其中包含按钮、文本和 NSTableView。 CurrentActionsViewController 类是一个 NSViewCon
我是一名优秀的程序员,十分优秀!