我正在尝试构建一个视图,其中包含垂直堆叠的多个表视图。我希望表格与其内容一起增长,而不是为每个表格视图指定一个固定的高度。然后堆栈嵌套在滚动视图中。
使用自动布局,我设法让嵌套的滚动视图随其表视图一起增长。但是,当我从表视图中删除行时,我无法将这些缩小。自动布局似乎假设视图的最佳大小是其当前大小。在我的设置中,最佳尺寸将是最小的尺寸。
“界面”构建器中的设置:
- Scrollview
-- Clipview
--- Container
---- Nested Scrollview
------ Clipview
------- Tableview
---- Nested Scrollview
------ Clipview
------- Tableview
在代码中,我添加约束来将表视图的前导,尾随,顶部和底部固定到它们的直接父剪辑视图。
测试项目(https://dl.dropboxusercontent.com/u/2381634/SO/AdjacentTableViews%20Auto-Layout.zip)包含用于添加和删除两个表视图中的行的按钮。
添加行会增加表格视图,剪辑视图,....外部双桨视图可以按预期滚动。
删除行无法缩小嵌套滚动视图。
如何让自动布局考虑最小拟合尺寸,拥抱内容,......?
答案 0 :(得分:0)
我最终继承了NSScrollView和NSTableView,以根据表视图中的行数计算intrinsicContentSize:
@implementation HHNestedScrollView
- (NSSize)intrinsicContentSize
{
NSView *documentView = [self documentView];
NSSize fSize = [documentView intrinsicContentSize];
if (fSize.height >= 0) {
if (self.borderType != NSNoBorder) {
fSize.height += 2;
}
}
return fSize;
}
- (void)scrollWheel:(NSEvent *)theEvent
{
[[self nextResponder] scrollWheel:theEvent];
[self setNeedsLayout:YES];
}
@end
@implementation HHNestedTableView
- (NSSize)intrinsicContentSize
{
NSSize fSize = [super intrinsicContentSize];
NSInteger nr = [self numberOfRows];
CGFloat rh = [self rowHeight];
CGFloat ih = [self intercellSpacing].height;
fSize.height = rh * nr + ih * MAX(nr, 1);
return fSize;
}
@end
只要表视图中的行数发生变化,我的视图控制器就会使intrinsicContentSize无效:
[[self.tableView enclosingScrollView] invalidateIntrinsicContentSize];