2017-03-01 55 views
0

當我爲自定義表格單元格有條件地設置約束條件時遇到問題。例如,我在一個自定義表格單元中有兩個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

謝謝你回來。經過多次實驗後,我決定採用這種方法,因此我放棄了這部分設計 –