我有一个 NSTableView,它应该在添加一行时调整它的框架。我会创建 2 个属性,maxHeight 和 minHeight,如果要添加或删除任何行,我会调整表格视图的大小以适应它的内容,如果它没有超过限制。
就像 Safari 下载面板(10.7 或更高版本)。有谁知道如何做到这一点?我想在一个子类中处理这个。所以不要搞乱委托类中的调整大小。
我至少需要知道在重新加载表视图时调用了哪个方法。reloadTable 只调用真正的重新加载方法,所以那里没有成功。
我有一个 NSTableView,它应该在添加一行时调整它的框架。我会创建 2 个属性,maxHeight 和 minHeight,如果要添加或删除任何行,我会调整表格视图的大小以适应它的内容,如果它没有超过限制。
就像 Safari 下载面板(10.7 或更高版本)。有谁知道如何做到这一点?我想在一个子类中处理这个。所以不要搞乱委托类中的调整大小。
我至少需要知道在重新加载表视图时调用了哪个方法。reloadTable 只调用真正的重新加载方法,所以那里没有成功。
不久前我做了类似的事情,我在控制器上做了,而不是在子类上(对不起,如果它不是你要找的东西)。基本上我写了一个方法,通过添加所有行的高度来计算 tableview 的高度。每次我从表中添加或删除一行时,我都会调用该方法。这里有一些让你开始的东西:
- (void)adjustTableSize
{
NSInteger minHeight = ...
NSInteger maxHeight = ...
NSInteger tViewHeight = 0;
for (int i = 0; i < [tableView numberOfRows]; i++) {
NSView* v = [tableView viewAtColumn: 0 row: i makeIfNecessary: YES]; // Note that this is for view-based tableviews
tViewHeight += v.frame.size.height;
}
NSInteger result = MIN(MAX(tViewHeight, minHeight), maxHeight);
// Do something with result here
}
如果你真的想在子类上使用它应该是可能的,但是弄清楚如何......
如果您不介意使用未记录的 API,这里有一个更简单的版本:
- (void)adjustTableSize
{
NSInteger minHeight = ...
NSInteger maxHeight = ...
NSInteger result = MIN(MAX([tableView _minimumFrameSize].height, minHeight), maxHeight);
// Do something with result here
}
由于这是未记录的,我不能保证它会起作用,但从我目前的测试来看,它确实有效。它可能比仅仅为了获得它们的高度而创建视图要快,特别是如果你有很多行。