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 然后让它重新出现?

如何在 UITableView 部分之间添加空间?

iOS:重新加载 UITableView 后滑动显示数据

在 UITableView 中的部分之间隐藏部分/空间

如何减少/删除分组 UITableView 中的左/右手边距?

[IOS] - UITableView 与 UICollectionView API及其使用