2016-07-23 105 views
0

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

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

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

我调查了使用接口调试器,发现自定义视图不会被添加到容器视图,但其所有约束(宽度,高度,midX,midY)设置为0.此外,我还看了我向下滚动(实际上已经正确加载了我的自定义视图的单元格)并且意识到有时容器视图有时会使用不同数据对我的自定义视图进行两个子视图。

我将不胜感激这方面的帮助。

N.B:我使用的斯威夫特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) 
} 
+0

请把你的setupWithData东西。我们无法想象没有代码你做了什么。 –

+0

@DharmbirSingh更新。 –

回答

0

不要叫addSubview:tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath)

请记住,单元格是可重用的。 particleView将一次又一次地添加到你的手机。

所以,请尽量您addSubview:之前从particleViewContainer删除子视图它

UPDATE

尝试调用self.parentViewContainer.layoutIfNeeded()使用self.parentViewContainer.width之前。

+0

恐怕删除子视图只会帮助在容器中存在多个自定义视图。 你说不要在'tableView(_ tableView:UITableView,cellForRowAt indexPath:IndexPath)'中调用'addSubview'',那么我应该在哪里调用它呢? –

+0

如果您正确删除子视图,则可以在cellfor中调用addSubview:。 – user3480295

+0

我现在这样做(通过'setupWithParticle'),但我的问题没有解决。在滚动之前,我仍然看到容器视图的红色背景。 –

相关问题