自定义UITableViewCell无法正确加载

时间:2016-07-23 13:03:00

标签: ios swift uiview tableview tableviewcell

我有一个自定义UITableViewCell,它有两个子视图,一个标签和一个UIView。 UIView是一个自定义视图的容器,它将在运行时加载,并且在IB中设置了红色背景。

自定义单元格具有设置单元格的方法setupWithData(data:Data)。使用tableView的数据源中的数据从tableView(_ tableView:UITableView,cellForRowAt indexPath:IndexPath)调用此方法。

但是,加载tableView时,只能看到前几个单元格的红色背景(没有自定义视图)。向下滚动时,自定义视图开始出现。奇怪的是,所有单元格的标签都有正确的文字。

我调查了使用接口调试器并发现自定义视图确实被添加到容器视图但是它的所有约束(width,height,midX,midY)都设置为0.另外,我还查看了加载向下滚动后的单元格(实际上已经使用我的自定义视图正确加载的单元格),并意识到有时容器视图中有时会有两个具有不同数据的自定义视图的子视图。

对此我感激不尽。

N.B。:我正在使用Swift 3。

更新

这是我的setup代码:

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)
}

1 个答案:

答案 0 :(得分:0)

请勿在{{1​​}}中致电addSubview:

请记住,单元格是可重用的。 tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath)将一遍又一遍地添加到您的手机中。

因此,请在particleView之前尝试从particleViewContainer删除子视图

<强>更新

尝试在使用addSubview:之前致电self.parentViewContainer.layoutIfNeeded()