我有一个自定义 UITableViewCell,它有两个 subview ,一个标签和一个 UIView。 UIView 旨在成为将在运行时加载的自定义 View 的容器,并且在 IB 中设置了红色背景。
自定义单元格具有用于设置单元格的 setupWithData(data: Data) 方法。该方法是从 tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) 调用的,并使用来自 tableView 数据源的数据。
但是,当加载 tableView 时,只能看到前几个单元格的红色背景(没有自定义 View )。当我向下滚动时,自定义 View 开始出现。奇怪的是,所有单元格的标签都有正确的文本。
我使用界面调试器进行了调查,发现自定义 View 确实添加到了容器 View 中,但其所有约束(宽度、高度、midX、midY)都设置为 0。此外,我还查看了加载的我向下滚动后的单元格(实际上已经正确加载了我的自定义 View 的单元格)并意识到有时容器 View 有时会有我的自定义 View 的两个具有不同数据的 subview 。
如果您对此有任何帮助,我将不胜感激。
注意:我正在使用 Swift 3。
更新
这是我的设置
代码:
func setupWithParticle(_ particle: ParticleProtocol, isFavourite: Bool = false) {
self.particleLabel.text = particle.name(withColor: false)
let particleView = ParticleView(position: CGPoint.zero, width: self.particleViewContainer.width, particle: particle)
particleView.respondsToTouch = false
particleView.setBorders([.Top, .Left, .Right, .Bottom], width: 1, color: .black())
if isFavourite {
particleView.backgroundColor = #colorLiteral(red: 0.9559464455, green: 0.7389599085, blue: 0.2778314948, alpha: 1)
}
self.particleViewContainer.subviews.forEach {
$0.removeFromSuperview()
}
self.particleViewContainer.addSubview(particleView)
}
最佳答案
不要在 tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath)
中调用 addSubview:
。
请记住,单元格是可重复使用的。 articleView
将一遍又一遍地添加到您的单元格中。
因此,在addSubview:
之前,请尝试从articleViewContainer
中删除 subview
更新
在使用 self.parentViewContainer.width
之前尝试调用 self.parentViewContainer.layoutIfNeeded()
。
关于ios - 自定义 UITableViewCell 未正确加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38542100/