UICollectionView показывает выгруженный xib и не обновляет содержимое внутри с помощью swift - PullRequest
0 голосов
/ 03 декабря 2018

У меня есть представление коллекции, которое загружается из файла .xib.Когда представление открывается иногда, представление представления загружает содержимое, а в других случаях оно не загружает содержимое в ячейку, вызывая отображение только .xib.В других случаях .xib даже не показывает.Однако я не понимаю, почему это происходит.При нажатии на ячейку открывается новый viewController с подробным представлением, в котором загружено содержимое, поэтому ячейка, очевидно, знает, что предполагается отображать.

var currentUser: User!
var listCategories: [String] = ["Friends Lists", "Friends", "People"]
var lists = [Media]()

в viewDidLoad:

collectionView.register(UINib(nibName: "ListCell2.0", bundle: nil), forCellWithReuseIdentifier: Storyboard.listCell)
collectionView.reloadData()
observeMedia()

observeMedia():

func observeMedia() {
    Media.observeNewMedia { (media) in
        if !self.lists.contains(media) {
            self.lists.insert(media, at: 0)
            self.collectionView.reloadData()
        }
    }
}

viewWillAppear:

override func viewWillAppear(_ animated: Bool) {

    observeMedia()

}

collectionView Методы:

extension HomeViewController
{

func numberOfSections(in collectionView: UICollectionView) -> Int {
    return listCategories.count
}

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {

    if section == 0 {

        return lists.count

    }else{
        return 0
    }

}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: Storyboard.listCell, for: indexPath) as! ListCell

    cell.layer.applySketchShadow(color: UIColor.black, alpha: 0.08, x: 0, y: 0, blur: 10, spread: 0)
    cell.layer.cornerRadius = 20
    cell.layer.masksToBounds = false

    cell.currentUser = self.currentUser
    cell.media = self.lists[indexPath.item]

    cell.mainView.setGradientBackground(colours: self.getColourFromTag(tag: self.lists[indexPath.item].tag))

    return cell

}

//section header view
func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView
{
    let sectionHeaderView = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: Storyboard.sectionHeader, for: indexPath) as! SectionHeaderView
    let category = listCategories[indexPath.section]
    sectionHeaderView.sectionTitle = category
    return sectionHeaderView
}

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    self.performSegue(withIdentifier: Storyboard.showListDetailSegue, sender: nil)
}

Ячейка CollectionView

import UIKit
import Foundation
import SAMCache

class ListCell: UICollectionViewCell {

@IBOutlet weak var nameView: UIView!
@IBOutlet weak var mainView: UIView!

@IBOutlet weak var nameButton: UIButton!
@IBOutlet weak var profileImageView: UIImageView!
//@IBOutlet weak var tagLabel: UILabel!
@IBOutlet weak var dateLabel: UILabel!
@IBOutlet weak var listTitle: UILabel!
@IBOutlet weak var boughtLabel: UILabel!
@IBOutlet weak var boughtProgress: UIProgressView!

var numOfItems = 0
var numOfBought = 0
var counter: Double = 0{
    didSet{

        boughtProgress.isHidden = false
        let fractionalProgress = Float(counter)
        boughtProgress.setProgress(fractionalProgress, animated: true)

    }
}
var currentUser: User!
var media: Media! {
    didSet{
        if currentUser != nil{
            self.updateUI()
        }
    }
}

var cache = SAMCache.shared()

func updateUI(){

    let profileImageKey = "\(media.createdBy.uid)-profileImage"
    if let image = cache?.object(forKey: profileImageKey) as? UIImage {

        self.profileImageView.image = image

    }else{
        media.createdBy.downloadProfilePicture { [weak self] (image, error) in
            if let image = image {

                self?.profileImageView.image = image
                self?.cache?.setObject(image, forKey: profileImageKey)

            }else if error != nil {

                print(error)
            }
        }
    }


    mainView.layer.cornerRadius = 20
    mainView.layer.masksToBounds = true

    //profile image

    profileImageView.layer.cornerRadius = profileImageView.bounds.height / 2.0
    profileImageView.layer.masksToBounds = true

    //name

    nameButton.setTitle("\(media.createdBy.firstName) \(media.createdBy.lastName)", for: [])
    nameView.layer.cornerRadius = 20
    nameView.layer.masksToBounds = true

    //date

    dateLabel.text = "\(convertDateFormatter(theDate: media.dueAt))"
    dateLabel.backgroundColor = UIColor(red: 1, green: 1, blue: 1, alpha: 0.3)
    dateLabel.textColor = UIColor.white
    dateLabel.layer.cornerRadius = dateLabel.bounds.height / 2.0
    dateLabel.layer.masksToBounds = true

    //title

    listTitle.text = "\(media.title)"

    //progress

    numOfItems = media.items.count
    print("num of items \(media.items.count)")
    counter = Double(numOfBought)/Double(numOfItems)
    boughtLabel.text = "\(numOfBought)/\(numOfItems) Bought"
    boughtProgress.layer.cornerRadius = boughtProgress.bounds.height / 2.0
    boughtProgress.layer.masksToBounds = true

}

@IBAction func arrowDidTap(){

    print("arrow tapped")
    print(media.tag)

}

func convertDateFormatter(theDate: String) -> String
{
    print(theDate)
    let newFormat = DateFormatter()
    newFormat.dateFormat = "dd/MM/yyyy"
    let dueDate = newFormat.date(from: theDate)
    newFormat.dateFormat = "dd MMM yy"
    print(newFormat.string(from: dueDate!))
    return  newFormat.string(from: dueDate!)

}

Первое изображение показывает, когда вид загружается впервые.это именно то, что показано в .xib, однако градиент загружен, а не содержимое

collection view not loaded

второе изображение показывает, как оно должно выглядеть,Это после прокрутки вида

Collection View loaded

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...