Swift:返回tableview单元格宽度错误

时间:2018-11-24 11:04:02

标签: swift uitableview frame

这是我的代码:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! MyChatCell

    if(x){
        cell.width = 100
    } else {
        cell.width = 300
    }
}

我通过以下代码进行管理:

class MyChatCell: UITableViewCell {
    var width: Int = 0

    override var frame: CGRect {
        get {
            return super.frame
        }
        set (newFrame) {
            var frame = newFrame
            var newWidth = frame.width
            if(width > 0){
                newWidth = CGFloat(width)
            }

            frame.size.width = newWidth

            super.frame = frame
        }
    }
}

此代码有效,但有时在重新加载数据或滚动表时,该单元格行的宽度设置不正确

这是普通视图的示例:

=======一个=======

===两个===

如果我滚动或重新加载数据,则显示在视图下方:

=======一个=======

=======两个=======

1 个答案:

答案 0 :(得分:0)

在您的MyChatCell类中添加此方法:

override func prepareForReuse()
{
    super.prepareForReuse()

    frame.size.width = 0
}

告诉我是否可行。