有条件地设置时,约束的行为不一致

时间:2017-03-01 22:34:37

标签: swift uitableview constraints

当我为自定义表格单元格有条件地设置约束时,我遇到了问题。例如,我在自定义表格单元格中有两个UIImageViews。它们相互约束,但偏移量取决于单元格内容。

当我设置UITableView时,一切都显得很好但是当我滚动单元格时,约束停止工作并且图像在跳转。我的代码如下所示:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
    {
    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! MyTableViewCell
    if myArray[indexPath.row] == "Farmyard" {
        cell.image1.image = UIImage(named: "Barn")
        cell.image2.image = UIImage(named: "Tractor")
        // offset +10
        cell.image2.centerXAnchor.constraint(equalTo: cell.image1.centerXAnchor, constant: 10).isActive = true
    } else if myArray[indexPath.row] == "Factory" {
        cell.image1.image = UIImage(named: "Warehouse")
        cell.image2.image = UIImage(named: "Truck")
        // offset +20
        cell.image2.centerXAnchor.constraint(equalTo: cell.image1.centerXAnchor, constant: 20).isActive = true
    }
    return cell
}

class MyTableViewCell: UITableViewCell {
    var image1: UIImageView!
    var image2: UIImageView!
    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
        image1 = UIImageView()
        contentView.addSubview(image1)
        image1.translatesAutoresizingMaskIntoConstraints = false
        image2 = UIImageView()
        contentView.addSubview(image2)
        image2.translatesAutoresizingMaskIntoConstraints = false
    }
    required init(coder aDecoder: NSCoder) {
        fatalError("init(coder:)")
    }
}

当我滚动浏览tableview时,看起来条件约束会丢失。当我向上和向下滚动时,我看到越来越多的图像处于错误的位置。有没有人也有这个问题或知道用自定义单元格设置条件约束的另一种方法?当我从cellForRowAt方法设置约束时,我只看到这个问题。从自定义单元格内设置的约束表现如预期。我想最终使用多个图像和标签,因此不能选择设置多个自定义单元格。

1 个答案:

答案 0 :(得分:1)

在返回单元格之前尝试添加以下行:

cell.setNeedsLayout()
cell.layoutIfNeeded()

我认为在滚动时会丢弃某些单元格的布局更改,因为单元格会被重用。