正如上面所说的,在UITableView中用于报头的高度不通过自动布局的控制,而是由
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
页脚高度由
-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
最后细胞高度由
设置设定
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
tableview从故事板,XIB文件或代码加载单元格。它使用上述方法为页眉,页脚和单元格设置框架的大小,并将它们的视图大小设置为适合该空间。
了解自动布局不会更改这些尺寸是很重要的,它只处理用于布局容器内视图的规则。
如果您的单元格/页眉/页脚正在使用静态大小,那么这很容易。您只需锁定所有子视图的高度,将您的单元格设置为您返回高度相同的大小...并且所有内容都看起来应该如何。
动态单元格/页眉/页脚需要更多工作。
基本上,你会被要求告诉tableview你的单元格/页眉/页脚的大小,然后再实际制作它,并调整所有子视图的大小。
您可以通过在cellForRowAtIndexPath和heightForRowAtIndexPath方法中设置一个断点来快速测试,高度首先被调用。
对于动态tableviewcell高度,一个常见的技巧是在viewDidLoad中创建一个单元并保存它以计算高度。然后,当您到达heightForRowAtIndexPath或heightForHeaderInSection时,请使用pre制作的单元格放入您将在最终单元格中使用的值,对于UILabels,请使用sizeWithFont(iOS 7之前)或boundingRectWithSize(iOS 7.0+),sizeThatFits for UITextViews。 (对于将来有人阅读,请检查这些方法是否未被更新的东西替代)
因此,将您想要的文本放入虚拟单元格中,获取标签和文字视图的高度,在它们之间添加空格并在完成后返回最终尺寸。
然后在cellForRowAtIndexPath或headerForSection中重做值的设置,但是会显示实际的单元格。
如果您的身高计算符合您的自动布局设置,那么所有东西都将完美地贴合在它的空间中。
如果要更改单元格或标题的高度后,它已经绘制,那么你会希望通过执行类似更新实现代码如下:
[self.tableView beginUpdates];
// change the data that will cause cell height to be different in heightForCellAtIndexPath or which will change a header or footer height calculation
[self.tableView endUpdates];
这将导致实现代码如下检查大小它只有更新单元格或页眉/页脚如果更改。
来源
2013-11-07 03:30:13
DC2
描述或理想地插入一张图片,说明如何将HeaderView“连接”在故事板中。 – bilobatum
没问题,对不起,我最初应该这样做。从故事板添加的屏幕截图。谢谢! – svguerin3
这很有用。您在调用标题视图时在技术上不是表视图标题视图。这只是您从对象库中拖出的视图。我会在我的回答中解释更多。 – bilobatum