如何将UITableViewController中UITableView表头设为全屏(无需手动计算)?
UITableView表头全屏适配方案(无需手动计算高度)
针对你遇到的导航栏导致表头无法全屏的问题,有几个不需要手动计算高度的解决方案:
关闭自动滚动视图Insets适配
在viewDidLoad()中添加这行代码,让UITableViewController不再自动给tableView添加导航栏高度的顶部inset:self.automaticallyAdjustsScrollViewInsets = false这样你原来设置的表头frame就能完全匹配控制器view的尺寸,不会被导航栏挤压缩小。
iOS 11+ 用contentInsetAdjustmentBehavior控制
如果你只需要适配iOS 11及以上版本,可以用这个更现代的API替代上面的属性:self.tableView.contentInsetAdjustmentBehavior = .never它的作用是禁止滚动视图根据安全区、导航栏等自动调整内边距,表头自然就能占满整个屏幕。
用Auto Layout约束绑定表头(最推荐)
放弃直接设置frame,改用约束让表头和控制器的view完全贴合,适配所有场景:// 创建表头实例,不用传frame let header = MyHeader(frame: .zero) header.translatesAutoresizingMaskIntoConstraints = false self.tableView.tableHeaderView = header // 添加约束绑定到控制器view的四边 NSLayoutConstraint.activate([ header.topAnchor.constraint(equalTo: self.view.topAnchor), header.leadingAnchor.constraint(equalTo: self.view.leadingAnchor), header.trailingAnchor.constraint(equalTo: self.view.trailingAnchor), header.bottomAnchor.constraint(equalTo: self.view.bottomAnchor) ]) self.tableView.tableHeaderView?.layoutIfNeeded()这种方式不需要关心导航栏、安全区的高度变化,系统会自动计算表头的正确尺寸。
内容的提问来源于stack exchange,提问作者Martin Perry
相关产品推荐
相关产品推荐

