[英]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.