UITableViewAutomaticDimension不使用自定义表格单元格

时间:2017-09-08 12:02:02

标签: ios swift uitableview cell

回答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
    }

表格视图estimatedRowHeightrowHeight也设置为UITableViewAutomaticDimension

但是表格视图仍然以44.0行高度绘制。

我不知道如何解决它。

PS我无法设置固定estimatedRowHeight,因为每个单元格都有动态高度

3 个答案:

答案 0 :(得分:0)

我可以看到你只是在cell contentView上添加了NoteView。您还应该在注释视图上应用自动布局约束,如前导,尾随,顶部和底部。 如果您在笔记视图上应用了正确的自动布局约束,希望它能够正常工作。

答案 1 :(得分:0)

你应该给 estimatedRowHeight 一些默认值,比如说60。 然后行的默认高度为60,但是当内容需要高度超过60时, UITableViewAutomaticDimension 将起作用。

答案 2 :(得分:0)

自动高度适用于计算单元格的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应设置为大致估算所有单元格大小的特定值。但那不是问题。