自动调整UITableView高度以仅显示存在的UITableViewCell

时间:2013-12-06 17:54:21

标签: ios objective-c cocoa-touch uitableview

似乎UITableView不会自动计算覆盖所有可见单元格所需的确切高度,而是用空行代替任何额外区域。

我想计算仅覆盖可见细胞所需的确切高度,以便清除那些丑陋的空行UITableView。我很清楚这可以使用Interface Builder手动完成,但是必须有一个更有效和动态的方法解决这个问题。

2 个答案:

答案 0 :(得分:5)

您可以使用表格视图的内容大小来确定表格所需的空间。

CGFloat height = myTableView.contentSize.height;

这个height会自动考虑页眉,页脚,单元格的大小和数量,以及其他任何内容。而且它都是动态的,所以如果你决定将来去7行表,它仍然可以正常运行而不需要改变那段代码。您需要更改它的唯一时间是,如果您在某个时候决定不再需要显示整个表格。

快速提示 - 您可能还想设置[myTableView setScrollEnabled:NO]。禁用滚动会阻止表格弹出"弹跳"如果用户确实尝试滚动它 - 我只是认为如果表中的所有内容一次显示,弹跳看起来真的很傻。

然后,您可以将此height用于

  • 调整表格视图的约束(如果您使用的是Autolayout)
  • 调整表格视图的frame(如果使用旧的弹簧和支柱方法)

答案 1 :(得分:0)

使用以下代码获取set cellHeight成员变量并在需要时使用它。

_cellHeight = floorf((CGRectGetHeight(self.tableView.bounds))/5);

这应该给你每行的高度,它将处理所有情况。 上述代码必须用于以下方法。

-(void)viewWillLayoutSubviews;
- (void)viewWillAppear:(BOOL)animated;

我希望这会有所帮助。