我遇到了一个特殊的问题,我从模拟器和iPhone上的单元出队中获得了不同的结果。
我有一个collectionView,它在2个部分中将两个自定义TableCollectionViewCell
出队。该TableCollectionViewCell
本身具有一个tableView
,它也可以使自定义InfoTableViewCell
出队。我在模拟器上获得了想要的结果,但在iPhone上却没有。这是屏幕截图
在模拟器(iphone SE)上:
在实体iphone6上:
有关“纠正”部分的通知,单元未正确出队,即仍反映先前的数据。我在其他设备上的模拟器上进行了测试,结果实际上与物理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
,但是它并不能真正解决问题。有什么建议吗?谢谢。