UITableViewCell 在 UITableView 中不可见

Posted

技术标签:

【中文标题】UITableViewCell 在 UITableView 中不可见【英文标题】:UITableViewCell not visible in UITableView 【发布时间】:2017-11-08 12:45:44 【问题描述】:

我在 ViewController 上有一个 UITableView。这是完整的代码

import UIKit

class UnitTableViewController: UIViewController, UITableViewDataSource, UITableViewDelegate 

    @IBOutlet weak var unitTable: UITableView!

    override func viewDidLoad() 
        super.viewDidLoad()

        self.unitTable.register(UnitCell.self, forCellReuseIdentifier: "UnitCell")
        self.unitTable.delegate = self
        self.unitTable.dataSource = self

    

    override func didReceiveMemoryWarning() 
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    

    func numberOfSections(in tableView: UITableView) -> Int 
        return 1
    

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
        return 5
    

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
        let cell = unitTable.dequeueReusableCell(withIdentifier: "UnitCell", for: indexPath) as! UnitCell
        cell.unitNameLbl?.text = "TEST"

        return cell
    


但不幸的是,我的自定义单元格不可见。我已经设置了绿色背景颜色以确保约束是正确的。 这是我的 UnitCell 代码

import UIKit

class UnitCell: UITableViewCell 
    @IBOutlet weak var unitNameLbl: UILabel?
    @IBOutlet weak var unitNumberLbl: UILabel?

    override func awakeFromNib() 
        super.awakeFromNib()
        // Initialization code
    

    override func setSelected(_ selected: Bool, animated: Bool) 
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    


如果我看不到自定义单元格,会出现什么问题?

【问题讨论】:

您是否设置了估算高度和/或行高?否则我相信它默认为 44pts。 检查cell的reuseIdentifier。如果给出正确与否。并尝试 unitTable.register(UINib(nibName: "yourIdentifier", bundle: nil), forCellReuseIdentifier: "yourIdentifier") 。注册一个笔尖 也许你已经将它作为一个类而不是 Nib 出列。正如 Arpita 提到的,尝试将其注册为 Nib @arpita 没错!我刚刚放了 unitTable.register(UINib(nibName: "UnitCell", bundle: nil), forCellReuseIdentifier: "UnitCell") 并按预期工作。并且还删除了 self.unitTable.register(UnitCell.self, forCellReuseIdentifier: "UnitCell") 没错@Micgal 【参考方案1】:

在 viewDidLoad 中尝试以下操作

unitTable.register(UINib(nibName: "yourCellClassName", bundle: nil), forCellReuseIdentifier: "UnitCell") 

【讨论】:

【参考方案2】:

您不能直接使用单元格的类名,因为您使用的是单元格的 XIB,因此您必须使用如下所示的 nib 名称注册单元格。

    let nib = UINib(nibName: "YourTableViewCellNibName", bundle: nil)
    self.unitTable.register(nib, forCellReuseIdentifier: "UnitCell")

【讨论】:

【参考方案3】:

将注册单元格更改为表格代码,如下所示。

override func viewDidLoad() 
        super.viewDidLoad()

        self.unitTable.register(UINib(nibName: "UnitTable", bundle: nil), forCellReuseIdentifier: "UnitCell") // nibName should be exact name of xib file of your custom cell.
        self.unitTable.delegate = self
        self.unitTable.dataSource = self

    

【讨论】:

以上是关于UITableViewCell 在 UITableView 中不可见的主要内容,如果未能解决你的问题,请参考以下文章

将子视图添加到 UITable

如何将文本包装在 Iphone 的 UITable 单元格中?

在 cellForRowAtIndexPath 中返回不同的 UITableViewCell 类型

UITableViewCell:图片出现在 Cell View 后面

UITableViewCell 未在其中显示 UILabel

UITableViewCell 无法根据它包含的动态 CollectionView 调整高度