4

我有一个 NSTableView,它应该在添加一行时调整它的框架。我会创建 2 个属性,maxHeight 和 minHeight,如果要添加或删除任何行,我会调整表格视图的大小以适应它的内容,如果它没有超过限制。

就像 Safari 下载面板(10.7 或更高版本)。有谁知道如何做到这一点?我想在一个子类中处理这个。所以不要搞乱委托类中的调整大小。

我至少需要知道在重新加载表视图时调用了哪个方法。reloadTable 只调用真正的重新加载方法,所以那里没有成功。

4

1 回答 1

4

不久前我做了类似的事情,我在控制器上做了,而不是在子类上(对不起,如果它不是你要找的东西)。基本上我写了一个方法,通过添加所有行的高度来计算 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
}

由于这是未记录的,我不能保证它会起作用,但从我目前的测试来看,它确实有效。它可能比仅仅为了获得它们的高度而创建视图要快,特别是如果你有很多行

于 2012-11-18T22:07:01.320 回答