You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:自定义UITableViewCell仅显示窄水平条问题

解决自定义UITableViewCell显示窄条的问题

问题描述

我尝试创建自定义UITableViewCell,但在模拟器里只显示一条窄水平条。换更大尺寸的设备也一样,而且我已经确认outlets连接正常。

相关代码

自定义Cell代码:

import UIKit

class EstimatedIncomeCell: UITableViewCell {

    static let identifier = "EstimatedIncomeCell"

    @IBOutlet weak var amountTextField: UITextField!

    @IBAction func buttonClicked(_ sender: Any) {
    }
}

ViewController代码:

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource{

    @IBOutlet weak var incomesTableView: UITableView!

    var amountOfIncomes = 1

    override func viewDidLoad() {
        super.viewDidLoad()
        self.incomesTableView.delegate = self
        self.incomesTableView.dataSource = self
        
        self.registerTableViewCell()
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        if let cell = incomesTableView.dequeueReusableCell(withIdentifier: "EstimatedIncomeCell") as? EstimatedIncomeCell{
            return cell
        }
        return UITableViewCell()
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 2
    }

    private func registerTableViewCell(){
        let incomeCell = UINib(nibName: "EstimatedIncomeCell", bundle: nil)
        
        self.incomesTableView.register(incomeCell, forCellReuseIdentifier: "EstimatedIncomeCell")
    }
}

解决方案

造成这个问题的核心原因是UITableView无法正确计算或获取Cell的高度,以下是几种解决方式:

1. 设置固定行高

在viewDidLoad中直接指定行高,数值根据你的Cell内容调整:

override func viewDidLoad() {
    super.viewDidLoad()
    self.incomesTableView.delegate = self
    self.incomesTableView.dataSource = self
    // 设置固定行高
    incomesTableView.rowHeight = 80
    self.registerTableViewCell()
}

2. 启用自动行高(推荐)

如果Cell内容高度不固定,启用自动行高让TableView根据布局约束自动计算高度:

override func viewDidLoad() {
    super.viewDidLoad()
    self.incomesTableView.delegate = self
    self.incomesTableView.dataSource = self
    // 启用自动行高
    incomesTableView.estimatedRowHeight = 80 // 预估高度,可根据实际调整
    incomesTableView.rowHeight = UITableView.automaticDimension
    self.registerTableViewCell()
}

3. 检查Cell的布局约束

确保自定义Cell内的控件(TextField、按钮)设置了完整的上下左右约束:

  • 控件顶部与Cell的contentView顶部有间距约束
  • 控件之间(比如TextField和按钮)有垂直间距约束
  • 底部控件与contentView底部有间距约束
    只有约束完整,AutoLayout才能正确计算出Cell的高度。

4. 排查Storyboard冲突

如果同时在Storyboard中设置了TableView的行高,可能会和代码设置冲突。建议保持代码和Storyboard设置一致,或者优先用代码控制行高。

内容的提问来源于stack exchange,提问作者NekNek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 20:25:22