我想在单个表格视图中使用来自 nib 的两个不同的自定义单元格。两个原型电池具有不同的高度
Posted
技术标签:
【中文标题】我想在单个表格视图中使用来自 nib 的两个不同的自定义单元格。两个原型电池具有不同的高度【英文标题】:I want to use two different custom cells from nib in a single table view. The two prototype cells have different heights 【发布时间】:2019-06-14 17:53:46 【问题描述】:我有一种情况,我必须为单个 tableView 使用两个不同的原型单元格。这两个原型电池具有不同的高度。当我尝试运行应用程序时,我没有得到不同的单元格高度。相反,我得到了重叠的单元格。单元格在索引 2 处相互重叠。
我为单元格制作了两个 xib,并在 tableview 中注册了这两个单元格。 Screenshot of what I am getting
extension Redeem: UITableViewDelegate, UITableViewDataSource
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return 4
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
if indexPath.row == 0
let cell1 = tableView.dequeueReusableCell(withIdentifier: "RedeemCell1", for: indexPath) as! RedeemCell1
return cell1
else if indexPath.row == 1
let cell1 = tableView.dequeueReusableCell(withIdentifier: "RedeemCell1", for: indexPath) as! RedeemCell1
return cell1
else if indexPath.row == 2
let cell2 = tableView.dequeueReusableCell(withIdentifier: "RedeemCell2", for: indexPath) as! RedeemCell2
return cell2
else if indexPath.row == 3
let cell1 = tableView.dequeueReusableCell(withIdentifier: "RedeemCell1", for: indexPath) as! RedeemCell1
return cell1
else
let cell1 = tableView.dequeueReusableCell(withIdentifier: "RedeemCell1", for: indexPath) as! RedeemCell1
return cell1
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
return UITableView.automaticDimension
【问题讨论】:
你能从 Debug View Hierarchy 添加截图吗? 我不知道如何调试视图层次结构。你能帮忙吗? 关注developer.apple.com/library/archive/documentation/…你应该点击那个红色的角按钮 我们需要了解一个高度有哪些单元格和它的内容视图 我无法在此处附上屏幕截图。我应该如何发送屏幕截图。 【参考方案1】:我认为,单元格的布局不正确。
要定义单元格的高度,您需要一个完整的约束链 和视图(具有定义的高度)来填充内容之间的区域 视图的上边缘和下边缘。
如果您在单元格中使用 XIB,您可以更改单元格中的模拟大小,看看发生了什么。单元格应该没有损坏的约束。
【讨论】:
我不明白。如何修复它。我是一名新开发人员。感谢您的支持。 请遵循本指南:developer.apple.com/library/archive/documentation/… 因此,您应该为所有子视图添加对 4 条边(顶部、底部、左侧、右侧或宽度、高度、左侧、右侧等)的约束。 您解决了这个问题吗?如果是,您可以将我的答案标记为已解决。否则,您可以添加其他信息,以便我们为您提供帮助。 非常感谢 Davydov 的支持。【参考方案2】:您需要实现heightForRowAt
func tableView(_ tableView: UITableView,heightForRowAt indexPath: IndexPath) -> CGFloat
if indexPath.row == 0
return 200
else if // and so on
或使用动态高度表单元格
【讨论】:
我用的是这两个属性:removeTableView.estimatedRowHeight = 120redeemTableView.rowHeight = UITableView.automaticDimension 那么它是动态的,所以你需要从单元格的顶部到底部正确设置约束。确保中间没有休息 好的。让我检查一下约束条件。以上是关于我想在单个表格视图中使用来自 nib 的两个不同的自定义单元格。两个原型电池具有不同的高度的主要内容,如果未能解决你的问题,请参考以下文章