ограничения ведут себя непоследовательно, когда установлены условно

У меня проблема, когда я условно устанавливаю ограничение для пользовательской ячейки таблицы. Например, у меня есть два 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:)")
    }
}

Похоже, что условные ограничения теряются при прокрутке таблицы. Когда я прокручиваю вверх и вниз, я вижу, что все больше и больше изображений находятся в неправильном положении. Кто-нибудь также сталкивался с этой проблемой или знает другой способ установить условные ограничения с пользовательской ячейкой? Я вижу эту проблему только тогда, когда устанавливаю ограничение из метода cellForRowAt. Ограничения, установленные в пользовательской ячейке, ведут себя должным образом. В конечном итоге я хочу использовать несколько изображений и меток, поэтому настройка нескольких пользовательских ячеек невозможна.


person Shane O'Seasnain    schedule 01.03.2017    source источник
comment
можешь поделиться всем кодом?   -  person Punit    schedule 02.03.2017


Ответы (1)


Попробуйте добавить следующие строки перед возвратом ячейки:

cell.setNeedsLayout()
cell.layoutIfNeeded()

Я думаю, что изменения макета некоторых ячеек отбрасываются при прокрутке, поскольку ячейки используются повторно.

person Desmond DAI    schedule 02.03.2017
comment
Спасибо, что вернулись. После нескольких экспериментов я решил, что этот подход не будет работать, поэтому отказался от этой части своего дизайна. - person Shane O'Seasnain; 08.03.2017