UITableViewAutomaticDimension 不适用于自定义表格单元格
Posted
技术标签:
【中文标题】UITableViewAutomaticDimension 不适用于自定义表格单元格【英文标题】:UITableViewAutomaticDimension not working with custom table cell 【发布时间】:2017-09-08 12:02:02 【问题描述】:有很多问题回答 UITableView 的 UITableViewCell 的动态高度。但是我无法解决我的问题。
我有这个表格单元格创建代码:
class UINoteTabelViewCell: UITableViewCell
override init(style: UITableViewCellStyle, reuseIdentifier: String?)
super.init(style: style, reuseIdentifier: reuseIdentifier)
self.selectionStyle = .none
func fill(_ note: Note)
let view = UINote(withNote: note, atPoint: .zero)
self.contentView.addSubview(view)
这就是我为表格视图创建单元格的方式:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "NotePreview", for: indexPath as IndexPath) as! UINoteTabelViewCell
cell.fill(notes[indexPath.row] as! Note)
return cell
表视图estimatedRowHeight
和rowHeight
也设置为UITableViewAutomaticDimension
但表格视图仍以 44.0 行高绘制。
我不知道如何解决它。
PS 我无法设置固定的estimatedRowHeight
,因为每个单元格都有动态高度
【问题讨论】:
estimatedRowHeight
不应为 UITableViewAutomaticDimension
。尝试将其设置为 100
并将 rowHeight
设置为 UITableViewAutomaticDimension。
UITableViewAutomaticDimension 与约束一起使用,您需要添加适当的约束,单元格可以通过该约束来计算其高度
确保您的标签编号为零行
尝试将tableView.rowHeight = UITableViewAutomaticDimension
写入cellForRowAtIndexPath
。
【参考方案1】:
自动高度适用于计算单元格的contentView
高度。因此,您必须添加将用于计算其实际高度的约束。
试试这个:
class UINoteTabelViewCell: UITableViewCell
override init(style: UITableViewCellStyle, reuseIdentifier: String?)
super.init(style: style, reuseIdentifier: reuseIdentifier)
self.selectionStyle = .none
func fill(_ note: Note)
let view = UINote(withNote: note, atPoint: .zero)
self.contentView.addSubview(view)
// this will make the difference to calculate it based on view's size:
view.translatesAutoresizingMaskIntoConstraints = false
view.leftAnchor.constraint(equalTo: contentView.leftAnchor).isActive = true
view.rightAnchor.constraint(equalTo: contentView.rightAnchor).isActive = true
view.topAnchor.constraint(equalTo: contentView.topAnchor).isActive = true
view.bottomAnchor.constraint(equalTo: contentView.bottomAnchor).isActive = true
此外,estimatedRowHeight
应设置为一个特定值,该值可以近似估计所有单元格的大小。但这不是问题。
【讨论】:
【参考方案2】:我可以看到您只是在单元格 contentView 上添加 NoteView。您还应该在笔记视图上应用自动布局约束,例如前导、尾随、顶部和底部。 如果您在便笺视图上应用正确的自动布局约束,希望它会起作用。
【讨论】:
【参考方案3】:你应该给 estimatedRowHeight 一些默认值,比如 60。 然后行的默认高度将是 60,但是当内容需要高度超过 60 时 UITableViewAutomaticDimension 将起作用。
【讨论】:
以上是关于UITableViewAutomaticDimension 不适用于自定义表格单元格的主要内容,如果未能解决你的问题,请参考以下文章