我试图使用自动布局在代码中的NSScrollView
(即标准配置)内部创建NSTableView
。我无法弄清楚如何使这项工作。使用自动布局的NSClipView/NSScrollView内的NSTableView的帧
这里是我的loadView:
- (void)loadView
{
NSView *view = [[NSView alloc] init];
NSScrollView *tableScroll = [[NSScrollView alloc] init];
NSTableView *fileTable = [[NSTableView alloc] init];
[tableScroll setDocumentView:fileTable];
[tableScroll setHasVerticalScroller:YES];
[tableScroll setHasHorizontalScroller:NO];
fileTable.delegate = self;
fileTable.dataSource = self;
[fileTable setHeaderView:nil];
[fileTable setAllowsColumnReordering:NO];
NSTableColumn *column = [[NSTableColumn alloc] initWithIdentifier:@"column1"];
[fileTable addTableColumn:column];
[tableScroll setTranslatesAutoresizingMaskIntoConstraints:NO];
[fileTable setTranslatesAutoresizingMaskIntoConstraints:NO];
[view addSubview:tableScroll];
NSDictionary *topViews = NSDictionaryOfVariableBindings(tableScroll);
[view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[tableScroll]|" options:0 metrics:nil views:topViews]];
[view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[tableScroll]|" options:0 metrics:nil views:topViews]];
self.fileTable = fileTable;
self.view = view;
}
会发生什么事是我的表视图的框架将永远等于NSClipView
的边界。该视图在窗口内部并被调整大小,当我这样做时,它将调整scrollview,剪辑视图和表格的大小,但是我永远不能在任何地方滚动。
看看我得到的约束,NSScrollView
获取了设置剪辑视图来填充它的约束条件,剪辑视图根本没有约束,而且表视图有一堆与其中的NSTableRowViews
相关的约束条件。
如果我在剪辑视图中添加像|[fileTable(>=500)]
这样的约束,我会得到500个像素的NSTableView,但显然我不想这样做。
如果我为'tableScroll'设置了自动调整掩码,在'tableScroll'和'fileTable'上调用'setTranslatesAutoresizingMaskIntoConstraints:YES'并移除两个'addConstraints'调用,它工作正常,我在剪辑视图中看到'NSAutoresizingMaskLayoutConstraint'指定'fileTable'需要的确切大小。 – 2013-03-13 17:30:53