簡體   English   中英

嘗試更新單元格時,自定義CollectionView單元格的布局元素消失

[英]Custom CollectionView cells' layout elements disappear when attempting to update the cell

我有一個用於集合視圖的自定義單元格,該單元格設置在情節提要中,並具有連接到相應單元格類的插座。

class MyCustomCollectionViewCell: UICollectionViewCell {

    // MARK: Outlets

    @IBOutlet weak var customImage: UIImageView!
    @IBOutlet weak var customProgress: UIProgressView!
    @IBOutlet weak var customLabel: UILabel!

}

初始設置可以完美運行,我正在根據數據庫中某項的特定狀態設置自定義圖像,名稱和進度。

我想更新集合視圖以反映更改,尤其是有關狀態欄的更改。 同樣,一旦狀態欄結束,圖像也應更改。

timer = NSTimer.scheduledTimerWithTimeInterval(3, target: self, selector: #selector(MyViewController.updateUI), userInfo: self, repeats: true)

我使用一個在視圖出現時啟動的計時器,希望每隔幾秒鍾更新一次視圖(我選擇3來進行有效測試,但它可能也要長達20秒)。

問題是,我不知道在這里使用哪種方法,因為所有方法都有特定的缺點:

  • reloadSections(mySection)reloadData()會導致所有單元格略微閃爍(可以),但會導致所有進度條在第一次更新后完全消失。
  • setNeedsLayout()setNeedsDisplay()似乎完全無效。 什么都看不見。

所有方法都在self.collectionView上調用, self.collectionView所示:

@objc private func updateUI() {
    // self.collectionView?.reloadSections(singleSection) 
    // self.collectionView?.reloadData() 
    // self.collectionView?.setNeedsLayout() 
    // self.collectionView?.setNeedsDisplay() 
}

(我一一嘗試了)

如何在進度條不消失的情況下自動更新視圖?

我認為您可以使用在另一個線程中運行的dispatch_async。

如果設置為true,則僅將圖像更改為collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath)的標志。

在單元格中,通過

dispatch_async(dispatch_get_main_queue(), {
    //do staff to controle your progress state
    // set your flag to true if progress is ok 
    // if ok then reload the collection  
   CollectionView.reloadData()}

現在該標志為true,更新您的圖像。 還沒有嘗試過,但是我認為這可能是一種可能的方式。

在對單獨隊列中的單元實施自動更新后(如user2718075建議),我仍然遇到視圖消失的問題。 每當我滾動並查看通過customProgress.hidden = true隱藏進度條的其他單元格時,帶有進度條的視圖就會消失,因為它們已經完成了。

這使我意識到這個問題與單元重用有關。 具有進度條的單元格將用於沒有進度條的另一個單元格,因此將其隱藏。 在需要進度條的單元中出隊並再次使用它之后,我沒有調用customProgress.hidden = false 將那條線添加到單元配置后,問題就消失了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM