分组样式UITableView底部出现额外空白的问题求助
解决UITableView额外空白问题的可行方案
针对你遇到的UITableView存在额外空白的问题,试试以下几个调整:
检查并修改TableView样式:如果你的TableView使用的是
Grouped样式,iOS会默认给分组头部保留额外间距。如果不需要分组展示,直接在Storyboard或代码里将样式改为Plain,这能直接消除大部分默认空白。iOS 15+ 新增的头部间距处理:如果必须使用
Grouped样式,在iOS 15及以上系统中,需要额外设置sectionHeaderTopPadding为0:if #available(iOS 15.0, *) { tableView.sectionHeaderTopPadding = 0 }替换最小浮点数为0:
.leastNormalMagnitude虽然是极小值,但系统可能仍会渲染出微小高度,直接将heightForHeaderInSection和heightForFooterInSection的返回值改为0试试:func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { return 0 } func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat { return 0 }确认TableView的约束:检查你的TableView在Storyboard中的约束是否正确,确保顶部、底部、左侧、右侧都紧贴父视图,没有额外的内边距或约束偏移。
修改后的完整代码示例(包含关键修复)
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { @IBOutlet weak var tableView: UITableView! let data = ["dwdwd","wdwddw","wddwdw"] let color = [UIColor.red,UIColor.blue,UIColor.green] override func viewDidLoad() { super.viewDidLoad() tableView.separatorStyle = .none tableView.contentInsetAdjustmentBehavior = .never tableView.tableHeaderView = nil tableView.tableFooterView = nil // iOS 15+ 处理分组头部额外间距 if #available(iOS 15.0, *) { tableView.sectionHeaderTopPadding = 0 } tableView.dataSource = self tableView.delegate = self } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return data.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { // 建议使用复用机制优化cell创建 let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) ?? UITableViewCell() cell.backgroundColor = color[indexPath.row] cell.textLabel?.text = data[indexPath.row] return cell } func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { return tableView.bounds.height / 3 } func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { return 0 } func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat { return 0 } }
另外补充一点:如果是在Storyboard中创建的TableView,记得给cell设置复用标识符(比如示例中的"Cell"),避免每次创建新cell带来的性能问题。
内容的提问来源于stack exchange,提问作者Denim
相关产品推荐
相关产品推荐

