我有一个ViewController,其中UITableView
(和一种UITableViewCell
)通过Interface Builder设置。我把它连接到一些IBOutlets
:
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.allowsSelection = false
tableView.dataSource = self
tableView.register(CommentTableViewCell.self, forCellReuseIdentifier: CommentTableViewCell.identifier)
tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 150
}
然后我实现了以下方法:
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
print(self.comments.count)
return self.comments.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
print(self.comments[indexPath.row], indexPath.row)
let cell = tableView.dequeueReusableCell(withIdentifier: CommentTableViewCell.identifier, for: indexPath) as! CommentTableViewCell
cell.comment = self.comments[indexPath.row]
print(cell)
return cell
}
func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCellEditingStyle {
let comment = comments[indexPath.row]
return comment.user.isMe ? .delete : .none
}
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
guard editingStyle == .delete, !isDeleting else {
return
}
isDeleting = true
let comment = self.comments[indexPath.row]
comment.delete() { result in
self.isDeleting = false
switch result {
case .success:
self.comments.remove(at: indexPath.row)
tableView.deleteRows(at: [indexPath], with: .automatic)
case .failure:
self.displayError("Could not delete comment")
}
}
}
现在这看起来很简单(所有用于调试的打印语句),但是,tableView实际上不会显示任何单元格。调用tableView.reloadData()
后,numberOfRowsInSection
方法返回2. cellForRowAt
也会打印2 CommentTableViewCell
。
但不显示这些内容。经过一些测试后,我发现显示了tableview
本身。
现在为什么会发生这种情况?我不认为我错过了什么。有没有人有这方面的经验?
谢谢: - )
答案 0 :(得分:0)
假设CommentTableViewCell
具有此comment
标签,请确保正确设置标签的垂直约束。问题似乎是关于不正确的细胞高度。
根据Reinier Melian的建议,尝试固定的高度,看看是否有效。
如果没有,请暂时将单元格更改为UITableViewCell
,然后设置标题标签并使其正常工作。这样,我们可以更好地隔离问题。