iOS UITableView 隐藏标题空间
Posted
技术标签:
【中文标题】iOS UITableView 隐藏标题空间【英文标题】:iOS UITableView Hide Header Space 【发布时间】:2014-08-05 15:53:54 【问题描述】:在视图控制器中,我只有一个 UITableView。在 IB 中,我将页眉和页脚高度设为 1,并且还添加了以下代码,但在第一个单元格上方,它们有很多页眉空间。我想摆脱那个空间。甚至滚动条也从第一个单元格开始,而不是在顶部。
-(CGFloat) tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
CGFloat height = 0.0001;
return height;
-(CGFloat) tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
CGFloat height = 0.0001;
return height;
-(UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
// Create Empty View
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, self.view.frame.size.width,
[self tableView:self.visitorlistsTv heightForHeaderInSection:section]) ];
return view;
-(UIView *) tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
// Create Empty View
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, self.view.frame.size.width,
[self tableView:self.visitorlistsTv heightForFooterInSection:section]) ];
return view;
使用上面的代码,页脚部分被隐藏了。但也无法隐藏标题。
查看解决方案的其他链接我还在视图中添加了 TableView,向 tableview 添加了约束,但标题部分仍然是他们的。
我哪里错了?如何摆脱它?
【问题讨论】:
为什么需要高度这么小的页眉和页脚?这看起来像一个非常糟糕的黑客。你想解决什么问题? 我读到返回 0 高度没有任何区别,因此我尝试返回这么小的标题。在第一个单元格上方的表格顶部,它们是空白空间,我想删除该空间。 【参考方案1】:如果您想删除UITableView
上方的空格,请尝试更改它的contentInset
属性,而不是使用小height
制作自定义标题:
self.tableView.contentInset = UIEdgeInsetsMake(-20.0f, 0.0f, 0.0f, 0.0f);
您可能需要调整第一个数字以将其调整为您的特定视图场景。
了解这也是一种解决方法 (source),但它比创建自定义表格视图标题更简洁。
【讨论】:
感谢工作。我已经添加了该行,我将第 1 段更改为 -20,然后可以看到更改。我必须到 -60 才能完全删除它。知道为什么以及这个空间是什么吗? 我的表格也没有分组 - IB 中的样式是普通的而不是分组的。【参考方案2】:我对此有另一种解决方案(在 ios 10 上进行了检查),对我来说,接受的解决方案不起作用。
在我的例子中,我有可变高度的部分标题,因此第一部分返回 0 高度是不可接受的。我使用了分组表格样式,因为我也需要分隔符来框出部分标题。
解决方案: 确保你的代码中没有这样的东西:
self.table.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
我用它来删除空行的分隔符,但分组样式是不必要的。
我知道这对你们所有人来说都不是这样,但它可能对我这种情况有所帮助。
【讨论】:
【参考方案3】:在我看来,这里的问题是您根本不想要页眉/页脚。如果是这种情况,您不想在页眉/页脚中返回任何视图。我建议要么在 viewForHeader/Footer 中返回 nil,要么完全不实现这些功能 - 它们是可选的。
【讨论】:
是的,我完全不想要页眉/页脚。但是在 height/viewFor 方法中不实现或返回 0 和 nil 对标题没有任何影响。使用页脚它可以工作。对于 Header,其唯一设置 contentInset 有效。标题部分没有任何效果。 我会尝试从代码中完全删除这些,也许尝试在 IB 中修复? 我完全同意你的看法。我也试过这样。花了这么多时间,我在这里问。【参考方案4】:使用导航栏,您可以更改顶部值
self.tableView.contentInset =UIEdgeInsetsMake(<#CGFloat top#>, <#CGFloat left#>, <#CGFloat bottom#>, <#CGFloat right#>)
self.tableView.contentInset = UIEdgeInsetsMake(-75.0f, 0.0f, 0.0f, 0.0f);
【讨论】:
【参考方案5】:如果你想避免设置硬编码的高度,你可以从你的第一个单元格 Y 位置设置 contentOffset 顶部,如下所示:
- (void)viewDidLayoutSubviews
UITableViewCell *firstCell = (self.tableView.visibleCells.count > 0?self.tableView.visibleCells[0]:nil);
[super viewDidLayoutSubviews];
// Get rid of the defaut header height.
self.tableView.contentInset = UIEdgeInsetsMake(-firstCell.frame.origin.y, 0, 0, 0);
【讨论】:
【参考方案6】:使用此代码删除 uitableview 的第一个单元格之间的空间。
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
return 0.002f;// set this...
【讨论】:
以上是关于iOS UITableView 隐藏标题空间的主要内容,如果未能解决你的问题,请参考以下文章
如何隐藏 UITableView Header 然后让它重新出现?