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

这里有一个例子:

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

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


更新(回答):

在iOS 11及更高版本中:

tableView.contentInsetAdjustmentBehavior = .never

当前回答

扔我的十美分在-我有同样的问题后,我删除了一个标题单元格从表视图。为了解决这个问题,我将属性检查器中的TableView样式从“分组”更改为“普通”,并删除了额外的空间。

其他回答

故事板:

只需取消勾选:在视图控制器的选项中调整滚动视图嵌入

代码:

self.automaticallyAdjustsScrollViewInsets = false

故事板:

确保你的UITableView top约束没有说“Under top layout guide”。相反,它应该说“顶部空间:Superview”(Superview.Top)。

当然,在包含UITableView的UIViewController中,取消勾选“调整滚动视图Insets”。

这段代码对我来说很有用,对我来说最好的答案是用objective-C写的,所以我把它转换成Swift。

针对Swift 4.0+

self.tableView.tableHeaderView = UIView(frame: CGRect(x: 0, y: 0, width: self.tableView.bounds.size.width, height: .leastNonzeroMagnitude))

只需将其写入viewDidLoad(),它就会像一个咒语一样工作。

对于iOS 15+,上面的一个将不起作用,所以使用这个:-

 if #available(iOS 15.0, *) {
      tableView.sectionHeaderTopPadding = 0
 }

对于iOS 15+,如果你想为你的整个项目应用更改,那么使用这个:-

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    
    if #available(iOS 15.0, *) {
        UITableView.appearance().sectionHeaderTopPadding = 0.0
    }
}

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

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

tableView.contentOffset = .zero

objective - c

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

对于ios7,如果你在视图控制器中分配tableview,你可以查看

self.edgesForExtendedLayout = UIRectEdgeNone;

你的问题似乎和我的相似

更新:

iOS 9.x中的Swift:

self.edgesForExtendedLayout = UIRectEdge.None

Swift 3:

self.edgesForExtendedLayout = UIRectEdge.init(rawValue: 0)