Swift:单元格不一致的出队

时间:2018-07-22 15:10:21

标签: swift

我遇到了一个特殊的问题,我从模拟器和iPhone上的单元出队中获得了不同的结果。

我有一个collectionView,它在2个部分中将两个自定义TableCollectionViewCell出队。该TableCollectionViewCell本身具有一个tableView,它也可以使自定义InfoTableViewCell出队。我在模拟器上获得了想要的结果,但在iPhone上却没有。这是屏幕截图

在模拟器(iphone SE)上:

enter image description here

在实体iphone6上:

enter image description here

有关“纠正”部分的通知,单元未正确出队,即仍反映先前的数据。我在其他设备上的模拟器上进行了测试,结果实际上与物理iphone6上的结果相同。

我的代码:

//At the collectionView displaying this page
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    switch indexPath.section {
    ...
    case 2:
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! TableCollectionViewCell
        cell.keyArray = ["Date and Time", "Site", "Location", "Risk", "Recorded by"]
        cell.valueArray = [item.timestamp?.prettyTimestamp() as Any,
                           item.site as Any,
                           item.location as Any,
                           item.riskClassification as Any,
                           recordedByName as Any]
        return cell

    case 3:
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! TableCollectionViewCell
        cell.keyArray = ["Date", "Rectified by"]
        cell.valueArray = [item.timestamp?.prettyTimestamp() as Any,
                           recordedByName as Any]
        return cell
    default:
        return UICollectionViewCell()
    }
}

//At TableCollectionViewCell
class TableCollectionViewCell: UICollectionViewCell {
    var keyArray: [String]?
    var valueArray: [Any]?

    override init(frame: CGRect) {
        super.init(frame: frame)
        layoutIfNeeded()
        layoutSubviews()
        setupViews()
    }

    func setupViews() {
    //All the adding of tableView, autolayout constraints and registering of cells
    }

    override func prepareForReuse() {
        super.prepareForReuse()
        keyArray = nil
    }

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

        guard
            let keyArray = keyArray,
            let valueArray = valueArray else {
                return UITableViewCell()
        }

        cell.keyLabel.text = keyArray[indexPath.row]
        cell.valueLabel.text = valueArray[indexPath.row] as? String
        cell.layoutIfNeeded()
        cell.layoutSubviews()
        return cell
    }

我也尝试了prepareForReuse,但是它并不能真正解决问题。有什么建议吗?谢谢。

0 个答案:

没有答案