我需要一个接一个地垂直添加标签,它们的编号是动态的。现在,它可以正常使用此代码:
let numUnitsLabel = UILabel(frame: CGRectZero)
numUnitsLabel.text = units
numUnitsLabel.font = UIFont.boldSystemFontOfSize(28)
numUnitsLabel.textColor = UIColor.redColor()
numUnitsLabel.translatesAutoresizingMaskIntoConstraints = false
cell.contentView.addSubview(numUnitsLabel)
let topConstraint = NSLayoutConstraint(item: numUnitsLabel, attribute: .Top, relatedBy: .Equal, toItem: cell.contentView, attribute: .Top, multiplier: 1, constant: 8 * CGFloat(i+1) + CGFloat(i*25) + CGFloat(i*20) - 5)
let rightConstraint = NSLayoutConstraint(item: numUnitsLabel, attribute: .Trailing, relatedBy: .Equal, toItem: cell.contentView, attribute: .Trailing, multiplier: 1, constant: -10)
cell.contentView.addConstraints([topConstraint, rightConstraint])
细胞被拉得很好。但是当我在列表中添加新项目并调用tableView.reloadData
时,旧标签会被“记住”而且它们会被新记录。新添加的对象放在数组中的第一位,它们就像一个又一个......也许我的方法很糟糕,但如果您有任何建议请咨询我。
答案 0 :(得分:1)
请记住,细胞会被重复使用,因此无论先前是否制备了细胞,它仍然具有所有这种状态。特别是,它的视图层次结构(添加的子视图)仍然存在。这样做的原因通常是表格单元格的布局保持不变,只有内容才能在cellForRowAtIndexPath
中重新设置。
你首先使用反模式,这就是你遇到困难的原因。
如果您确实要清除并重新布局单元格,请每次都明确删除所有子视图,例如:
我怀疑,(不可否认,这不是CodeReview)你的设计存在缺陷。通常,表格细胞不需要随着内部元素的动态计数而增长。您可能需要嵌套表(!!),每个表中只有一个多行UITextView
,或者是由具有自定义节标题视图的部分构成的表。