我正在尝试构建一个包含多个垂直堆叠的表视图的视图。我不想为每个表视图分配一个固定的高度,而是希望这些表随其内容一起增长。然后将堆栈嵌套在滚动视图中。
使用自动布局,我设法让嵌套的滚动视图与它们的表视图一起增长。但是,当我从表视图中删除行时,我无法使这些行缩小。自动布局似乎假定视图的最佳大小是其当前大小。在我的设置中,最好的尺寸将是最小的试穿尺寸。
界面生成器中的设置:
- Scrollview
-- Clipview
--- Container
---- Nested Scrollview
------ Clipview
------- Tableview
---- Nested Scrollview
------ Clipview
------- Tableview在代码中,我添加了约束来将表视图的前导、尾部、顶部和底部固定到它们的直接父剪辑视图。
测试项目( https://dl.dropboxusercontent.com/u/2381634/SO/AdjacentTableViews%20Auto-Layout.zip )具有在两个表视图中添加和删除行的按钮。
添加行将增长表视图、剪辑视图、…。外部的scull视图可以按预期滚动。
删除行无法缩小嵌套的滚动视图。
如何让自动布局考虑到最小试衣尺寸,拥抱内容,…?
发布于 2014-09-01 22:58:58
我最终根据表视图中的行数对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];https://stackoverflow.com/questions/24608078
复制相似问题