从 .xib 创建的自定义 UITableViewCell 不显示
Posted
技术标签:
【中文标题】从 .xib 创建的自定义 UITableViewCell 不显示【英文标题】:Custom UITableViewCell created from .xib doesn't show 【发布时间】:2017-06-11 23:30:30 【问题描述】:我迷路了。我搜索和搜索,找不到我的自定义单元格未显示的原因。
// ProfileCell.swift:
import UIKit
import QuartzCore
class ProfileCell: UITableViewCell
@IBOutlet weak var profileNameLabel: UILabel!
@IBOutlet weak var profilePictureView: UIImageView!
第二个默认的TableViewCell正常显示。我在 Interface Builder 中没有缺少约束或任何错误。 ProfileCell 在 ProfileCell.xib 标识选项卡中选择为自定义类。
// MoreTableViewControllerIB.swift
import UIKit
class MoreTableViewControllerIB: UITableViewController
override func viewDidLoad()
super.viewDidLoad()
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return 2
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
// this cell is missing
if indexPath.row == 0
tableView.register(UINib(nibName: "ProfileCell", bundle: nil), forCellReuseIdentifier: "ProfileCell")
let cell = tableView.dequeueReusableCell(withIdentifier: "ProfileCell", for: indexPath) as! ProfileCell
cell.profileCommentLabel.text = "Test Comment Label"
cell.profilePictureView.image = UIImage(named:"profile_picture_test")
return cell
// this cell is displayed perfectly
else if indexPath.row == 1
let cell = tableView.dequeueReusableCell(withIdentifier: "statisticsCell") ?? UITableViewCell(style: .default, reuseIdentifier: "statisticsCell")
cell.accessoryType = UITableViewCellAccessoryType.disclosureIndicator
cell.textLabel?.text = "Statistics"
cell.imageView.image = UIImage(named:"statistics")
return cell
// has to return a cell in every scenario
else
let cell: UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as UITableViewCell
return cell
Here is a screenshot of what I get.
【问题讨论】:
【参考方案1】:tableView.register(UINib(nibName: "ProfileCell", bundle: nil), forCellReuseIdentifier: "ProfileCell")
在 viewDidLoad 或 viewWillApppear 中添加这一行
【讨论】:
感谢您的回答,但这不是错误。在“cellForRowAt indexPath”中注册 .xib 也可以。请参阅我自己的答案以了解问题所在。【参考方案2】:所以我发现我的错误是什么。太傻了,花了我半天时间:
单元格已显示,但默认高度不足以看到它。我认为将使用 .xib 中的设置高度。显然不是。 所以我添加了这个:
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
if indexPath.row == 0
return 192 // the height for custom cell 0
【讨论】:
【参考方案3】:在我的情况下,我必须另外注册 nib 以查看我的单元格:
myTableView.register(UINib(nibName: "nibwithcell", bundle: nil), forCellReuseIdentifier: "cell") // you need to register xib file
【讨论】:
以上是关于从 .xib 创建的自定义 UITableViewCell 不显示的主要内容,如果未能解决你的问题,请参考以下文章
UITableView 和自定义 UITableViewCell 使用 .xib
如何将 SwipeCellKit 的自定义滑动功能用于从 .xib 文件创建的自定义单元格?