2017-08-16 122 views
0

我正在更新約束的CellForRow方法。更新約束後,我應該調用哪個方法,setUpdateConsraint()或layoutIfNeeded()?或者只是返回細胞。無需調用任何方法?更新約束在cellforRow

+0

調用cell.layoutIfNeeded()調用 – karthikeyan

+0

layoutIfNeeded()用於更新的約束。 – shahnilay86

回答

0

致電layoutIfNeeded()並執行方法prepareForReuse您需要重置約束的方法。

例如:

override func prepareForReuse() { 
    super.prepareForReuse() 

    yourConstraint.constant = defaultConstraint 
} 

爲什麼這是neeeded:當您滾動,因爲細胞被重新使用它會隨機使用的限制後。

0

cellForRowAt是一個完全可以接受的地方來更新約束,然後簡單地返回單元格。你並不需要調用別的:

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

    // Configure the cell... 

    cell.theLabel.text = "\(indexPath)" 
    cell.theHeightConstraint.constant = indexPath.row % 2 == 0 ? 40 : 100 

    return cell 
} 
+0

當我做這個約束沒有得到更新 –

+0

*「約束沒有得到更新」* ---你是什麼意思?你不*看到*它?你是否收到錯誤或警告信息?其他一些代碼是否也在改變'.constant'?如果您逐步進行調試,您會得到什麼樣的價值?你需要提供更多的信息。 – DonMag

+0

更新約束常量值後,調用updateConstraint()工作正常。 –