2016-07-23 110 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'),但我的問題沒有解決。在滾動之前,我仍然看到容器視圖的紅色背景。 –

相關問題