我正在OSX 10.10.2上使用Xcode 6.1.1
如何让我的表调整其高度,以便表的高度始终等于所有行的高度之和。
换句话说,它不应该显示任何空行。添加和删除行将需要NSTableView自行调整大小。
最初我想在添加和删除行后使用以下选择。
[_tableViewHandle setFrameSize:(NSMakeSize(oldwidth, sumOfHeightOfAllRows)))]
但它看起来像是黑客。
也可以仅使用IB来完成吗?
答案 0 :(得分:2)
不知道是否可以仅使用IB来完成。在我的例子中,我使用autolayout约束并更改其constant
值。
constant
值。答案 1 :(得分:1)
它应该可以将表视图限制为具有顶部和底部约束的超级视图(剪辑视图)。您不必手动调整高度或任何约束constant
。它应该是自动的(表视图将自己调整大小;这将强制剪辑视图足够大以包含表视图;这将强制滚动视图足够大以包含剪辑视图;等等。)。 p>
答案 2 :(得分:1)
NSTableView
的实例与UITableView
的实例的工作方式不同。基本上在OS X上,可滚动表视图是NSScrollView
的实例,其中包含NSTableView
的实例作为文档视图。
- NSScrollView和NSClipView
这两个类不是表视图的一部分 - 也不是必需的 - 但实际上所有的表视图都是使用构成滚动视图机制的类来显示的。
此文档视图由滚动视图的剪辑视图(“文档区域”)剪切,该视图是滚动视图本身的子视图。
Here您对滚动视图层次结构有一个解释。
因此表视图本身是一个非滚动视图,其大小自动从其内容(行数)中采用 - 以及您想要的一切和您需要的一切。
因此,有两种方法可以实现目标:
从其层次结构中“操作”表格视图:使用单个表格视图而不显示其父视图。当您在窗口中放置表格视图时,这是不您在IB中获得的内容。您必须手动执行此操作或在代码中构建表视图。
使用autolayout将父级滚动视图的大小调整为表格视图。
我更喜欢第一种方法,因为如果没有可滚动和剪辑的内容,我看不出有任何理由在表视图周围有一个带有剪辑视图的滚动视图。但是,第二种方法也应该有效。
如果您有任何疑问,只需将其添加为评论即可。
以下是一个例子:
我制作了一段视频,以便更好地解释
http://sendvid.com/0lu0tgda?secret=d7b751f9-a3e9-4cd1-9865-20884b0bd6c8
我把一个“Tableview”(也就是你从IB得到的东西,所以它是一个带有桌子的滚动视图层次)放入一个窗口并放在左侧。我做了一些绑定,以便轻松插入和删除。只是通常的东西。
然后我有一个方法,用它的表视图替换滚动视图:
- (IBAction)replaceView:(id)sender
{
// Exchange the view
NSView *contentView = self.scrollView.superview;
NSTableView *tableView = self.tableView;
[contentView addSubview:self.tableView]; // Isolate the table view and make it the new subview
NSRect frame;
frame.origin = self.scrollView.frame.origin; // Take the location from the scroll view
frame.size = tableView.frame.size; // Take the table views size
tableView.frame = frame;
[self.scrollView removeFromSuperview]; // Remove the meaningless scroll view
// Size the window to the table view
NSWindow *window = contentView.window;
NSRect contentFrame = contentView.frame;
contentFrame.size.height = frame.size.height;
NSRect windowFrame = window.frame;
windowFrame.size.height = [window frameRectForContentRect:contentFrame].size.height;
[window setFrame:windowFrame display:YES];
// Set constraints to make the window resizing, when table view resizes
[contentView addConstraints:
[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[tableView]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(tableView)]];
}
是的,你可以在很多方向美化它。但是,它只是为了演示您需要做什么以及使用哪些工具。