从iOS7开始,在我的UITableView顶部有额外的空间它有一个UITableViewStyleGrouped样式。

这里有一个例子:

tableview从第一个箭头开始,有35个像素的无法解释的填充,然后绿色的头是一个由viewForHeaderInSection返回的UIView(其中section为0)。

有人能解释一下这个35像素的数量是从哪里来的吗?我如何才能在不切换到UITableViewStylePlain的情况下摆脱它?


更新(回答):

在iOS 11及更高版本中:

tableView.contentInsetAdjustmentBehavior = .never

当前回答

根据苹果iOS7的过渡指南,滚动视图的内容嵌入是自动调整的。 automcallyadjustsscrollviewinsets的默认值设置为YES。

拥有UITableView的UIViewController应该将这个属性设置为NO。

self.automaticallyAdjustsScrollViewInsets = NO;

这样就可以了。

编辑1:

也可以尝试

self.navigationController.navigationBar.translucent = YES;

这也删除了顶部的额外填充。

其他回答

在iOS系统中,我在滚动视图中设置了tableview。当我在同一个屏幕上点击“返回”时滚动视图在顶部占用更多空间..为了解决这个问题,我使用了:

 self.automaticallyAdjustsScrollViewInsets = false

一个布尔值,指示视图控制器是否应自动调整其滚动视图嵌入。 默认值为true,该值允许视图控制器根据状态栏、导航栏、工具栏或选项卡栏所占用的屏幕区域来调整其滚动视图嵌入。如果您想自己管理滚动视图插入调整,例如当视图层次结构中有多个滚动视图时,则设置为false。

如果自我。automcallyadjustsscrollviewinsets = NO;不为你工作,确保tableview头或section头的高度是CGFLOAT_MIN而不是0。

例如,如果你想让tableview头0高,你可以这样做:

    CGRect frame = self.tableViewHeader.frame;
    frame.size.height = CGFLOAT_MIN; //not 0
    self.tableView.tableHeaderView.frame = frame;
    self.tableView.tableHeaderView = self.tableViewHeader;

希望能有所帮助。

在我的例子中,在Storyboard的原型可视化中有一个不需要的名为HeaderView的单元格,当我删除它时,一切都很好。

在尝试了一切之后,终于知道如何解决这个问题!

我注意到,由于某种原因,我的tableview的contenttoffset有一个'y'为-20,所以当配置我的tableview: 斯威夫特3/4

tableView.contentOffset = .zero

objective - c

self.tableView.contentOffset = CGPointMake(0, 44);

2021年Xcode 12.3更新

要解决这个问题,需要禁用标准节页脚。 下面的代码片段可以完成这项工作:

override func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
    return nil
}

override func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    return 0
}

的使用

tableView.contentInsetAdjustmentBehavior = .never

与此完全无关