如何在UITableView中设置表头的高度?

app*_*eak 69 iphone uitableview

我已经浏览了有关UITableView类和委托引用的Apple文档,但无法找到明确设置表头高度的方法.

我使用以下委托设置表格单元格高度:

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
Run Code Online (Sandbox Code Playgroud)

并使用以下代理设置节标题/页脚高度.

-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
Run Code Online (Sandbox Code Playgroud)

谁能帮我设置表格页眉/页脚高度?

谢谢.

Rog*_*ger 59

只需设置tableHeaderView的frame属性即可.


bcd*_*bcd 58

我找到了一个很好的黑客.修改框架属性后添加以下行

self.tableView.tableHeaderView = self.tableView.tableHeaderView;
Run Code Online (Sandbox Code Playgroud)

诀窍是(我认为)当你将视图分配给tableHeaderView属性时,UITableView正在缓存高度(实际上是框架).上面的线只是再次分配高度.


Kri*_*ris 36

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    sizeHeaderToFit()
}

private func sizeHeaderToFit() {
    let headerView = tableView.tableHeaderView!

    headerView.setNeedsLayout()
    headerView.layoutIfNeeded()

    let height = headerView.systemLayoutSizeFitting(UILayoutFittingCompressedSize).height
    var frame = headerView.frame
    frame.size.height = height
    headerView.frame = frame

    tableView.tableHeaderView = headerView
}
Run Code Online (Sandbox Code Playgroud)

更多细节可以在这里找到

  • 从 iOS 12.4 开始,由于无休止的布局循环,这导致了冻结 (2认同)

Fab*_*bio 9

如果您仍然需要它,您是否尝试过设置该属性

self.tableView.tableHeaderView 
Run Code Online (Sandbox Code Playgroud)

如果您计算所需的高度,并为以下内容设置新视图tableHeaderView:

CGRect frame = self.tableView.tableHeaderView.frame;
frame.size.height = newHeight;

self.tableView.tableHeaderView = [[UIView alloc] initWithFrame:frame];
Run Code Online (Sandbox Code Playgroud)

它应该工作.


Hos*_*eeb 6

只有当我将tableview的页脚/标题设置为nil时,它才适用于我:

self.footer = self.searchTableView.tableFooterView;
CGRect frame = self.footer.frame;
frame.size.height = 200;
self.footer.frame = frame;
self.searchTableView.tableFooterView = nil;
self.searchTableView.tableFooterView = self.footer;
Run Code Online (Sandbox Code Playgroud)

确保self.footer是一个强大的参考,以防止页脚视图被释放