2017-03-01 5 views
0

カスタムテーブルセルに対して条件付きで制約を設定すると問題が発生します。たとえば、カスタムテーブルセルに2つの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メソッドから制約を設定した場合にのみ、この問題が発生します。カスタムセル内から設定された制約は、期待どおりに動作します。私は最終的に複数の画像とラベルを使いたいので、複数のカスタムセルを設定することは選択肢ではありません。セルを返す前に次の行を追加し

+0

あなたはコード全体を共有できますか? –

答えて

1

試してみてください。

cell.setNeedsLayout() 
cell.layoutIfNeeded() 

私は、細胞が再利用されているので、スクロールしながらいくつかのセルのレイアウト変更が破棄されていると考えています。

+0

戻ってくれてありがとう。私はいくつかの実験を実行した後にこのアプローチがうまくいかないと決めたので、私はこの設計の部分を断念しました –

関連する問題