为啥我的自定义 UITableViewcell 没有显示?
Posted
技术标签:
【中文标题】为啥我的自定义 UITableViewcell 没有显示?【英文标题】:Why isn’t my custom UITableView cell showing?为什么我的自定义 UITableViewcell 没有显示? 【发布时间】:2020-05-12 06:34:47 【问题描述】:我已经为 UITableView 实现了一个自定义单元格,但是当我运行 Playground 时,它只是一个标准表格。这可能很简单,但我对 UIKit 很陌生,对 Swift 也很陌生。
此外,我尝试实现“粘性标题”,但无论我尝试什么,标题都会随着表格的其余部分滚动。
import UIKit
import PlaygroundSupport
class ViewController : UIViewController, UITableViewDelegate, UITableViewDataSource
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return 19
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell: CardCell = tableView.dequeueReusableCell(withIdentifier: "CardCell", for: indexPath) as! CardCell
cell.messageLabel.text = "yo"
return cell
var convoTableView = UITableView()
override func viewDidLoad()
super.viewDidLoad()
convoTableView = UITableView(frame: self.view.bounds, style:
UITableView.Style.plain)
convoTableView.backgroundColor = UIColor.white
convoTableView.register(CardCell.self, forCellReuseIdentifier: "CardCell")
let header = UIView(frame: CGRect(x: 0, y: 0, width: convoTableView.frame.width, height: 100))
header.backgroundColor = .red
self.convoTableView.delegate = self
self.convoTableView.dataSource = self
let yourLabel = UILabel(frame: CGRect(x: 10, y: 0, width: 100, height: 100))
yourLabel.textColor = UIColor.black
yourLabel.backgroundColor = UIColor.white
yourLabel.text = "mylabel text"
header.addSubview(yourLabel)
convoTableView.tableHeaderView = header
convoTableView.estimatedSectionHeaderHeight = 40.0
self.view.addSubview(convoTableView)
class CardCell: UITableViewCell
let messageLabel:UILabel =
let label = UILabel()
label.font = UIFont.boldSystemFont(ofSize: 14)
label.clipsToBounds = true
label.translatesAutoresizingMaskIntoConstraints = false
return label
()
let dateLabel:UILabel =
let label = UILabel()
label.font = UIFont.boldSystemFont(ofSize: 8)
label.clipsToBounds = true
label.translatesAutoresizingMaskIntoConstraints = false
return label
()
let containerView:UIView =
let view = UIView()
view.translatesAutoresizingMaskIntoConstraints = false
view.clipsToBounds = true
return view
()
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?)
super.init(style: style, reuseIdentifier: reuseIdentifier)
containerView.addSubview(messageLabel)
containerView.addSubview(dateLabel)
self.contentView.addSubview(containerView)
required init?(coder: NSCoder)
fatalError("init(coder:) has not been implemented")
PlaygroundPage.current.liveView = ViewController()
【问题讨论】:
【参考方案1】:这里是制作自定义单元格和粘性标题所需的所有代码:
import UIKit
import PlaygroundSupport
class ViewController: UITableViewController
override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?
let view = UIView()
view.backgroundColor = .purple
return view
override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat
50
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
19
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "CardCell", for: indexPath) as! CardCell
cell.textLabel?.text = "\(indexPath.row)"
return cell
override func viewDidLoad()
super.viewDidLoad()
tableView.register(CardCell.self, forCellReuseIdentifier: "CardCell")
class CardCell: UITableViewCell
PlaygroundPage.current.liveView = ViewController()
【讨论】:
【参考方案2】:要使表头在表格视图中具有粘性且不可滚动,您需要在表格视图上方使用不同的 UIView,并在 UiView 下方提供表格的框架。
customView = MyCustomView(frame: CGRect(x: 0, y: 0, width: 200, height: 50))
self.view.addSubview(customView
【讨论】:
以上是关于为啥我的自定义 UITableViewcell 没有显示?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的自定义 UITableViewCell 宽度在初始加载时不正确?
为啥在我的自定义 UIView 类中没有调用 init(frame: CGRect)?