Programmgesteuert vorgenommen UICollectionViewController nicht zeigen Zellen

Hintergrund ist schwarz und die Zellen sind weiß obwohl keine der Zellen zeigen in der simulator? würde man sich, warum das sein könnte?

import UIKit
import Foundation

class ChatLog: UICollectionViewController, UITextFieldDelegate, UICollectionViewDelegateFlowLayout {

    let cellId = "cellId"

    override func viewDidLoad() {
        super.viewDidLoad()

        collectionView?.backgroundColor = UIColor.black
        collectionView?.register(UICollectionViewCell.self, forCellWithReuseIdentifier: cellId)    
    }

    override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return 5
    }

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

        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath)
        cell.backgroundColor = UIColor.white

        return cell
    }

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        return CGSize(width: view.frame.height, height: 80)
    }

}
  • haben Sie versuchen, Debuggen?
  • Hast du wahrscheinlich nicht die class im storyboard.
  • Wenn Sie ein xib-Zelle: collectionView?.register(UINib(nibName: „nibname“, bundle: nil), forCellWithReuseIdentifier: „reusableCellID“)
  • In collectionView(_:layout:sizeForItemAt:) Sie bekommen eine Fehlermeldung, wie Sie die Einstellung der Breite der Zelle zu werden, die Aussicht auf der Höhe. Ersetzen mit return CGSize(width: view.frame.width, height: 80) vermute ich.

 

2 Replies
  1. 4

    Update:

    Initialisierung des ChatLog-view-controller programmatisch wie folgt bedeutet, dass der UICollectionView datasource-Methoden sind nicht als e.g collectionView(_:cellForItemAt:) ist nicht genannt.

    let newViewController = ChatLog(collectionViewLayout: UICollectionViewLayout())

    Ersetzen mit diese:

    let newViewController = ChatLog(collectionViewLayout: UICollectionViewFlowLayout())

    Als Sie erklärt haben, ein UICollectionViewController Sie nicht wirklich benötigen, um explizit im code, die delegate und dataSource Eigenschaften Ihrer Sammlung anzeigen.

    Einfach stellen Sie sicher, dass in der Main.storyboard sind, sind Sie mit der Klasse Ihrer UICollectionViewController um ChatLog, indem Sie auf den view-controller und dann den identity inspector. Auch sicherstellen, dass Sie geklickt haben, die UICollectionViewCell und setzen Sie den Bezeichner auf „cellId“.

    Wenn dies ist ein multiple-view-controller-Projekt, sicherstellen, dass es möglich ist, zu navigieren, zu ChatLog-view-controller, indem es initial view controller oder die Bereitstellung von segue/navigation dieses view-Controllers aus einer anderen view-controller.

    Bilder unten Umriss meine Lösung.

    Programmgesteuert vorgenommen UICollectionViewController nicht zeigen Zellen

    Programmgesteuert vorgenommen UICollectionViewController nicht zeigen Zellen

    • Ich bin nicht mit storyboard , alles ist getan-code
    • wie sind Sie mit der Initialisierung und navigieren zu der collection view controller? Bearbeiten können Sie die Frage an diese Informationen?
    • check this out, wenn Sie xibs stackoverflow.com/questions/13281631/…
    • ich bin nicht mit xibs und ich denke nicht, dass es irgendetwas damit zu tun hat, wie ich bin gettting zu den chatlog collectioviewcontroller ich denke, das problem ist jetzt, dass die Zelle für das Element nicht genannt wird?
    • Ich aktualisiert meine Antwort, lassen Sie mich wissen, ob das hilft.
    • ich legen lassen newViewController = ChatLog(collectionViewLayout: UICollectionViewFlowLayout()) oben Ansicht hat geladen und es gab eine Fehlermeldung SCHLECHTEN ZUGANG“
    • Wo hast du noch diese Zeile? Ich bin nicht in der Lage zu reproduzieren das Problem. In der Regel würden Sie rufen present(newViewController, animated: false) wie gut und sicher sein, dies zu schreiben, nachdem viewDidAppear oder irgendwo nach der Ersten View-Controller geladen wird, in die Fenster-Hierarchie (ich.e nicht in viewDidLoad). In der Regel schlechten Zugang bedeutet, Sie sind gezwungen, Auspacken irgendwo. Aber für mich ist es schwierig zu helfen, ohne mehr Informationen über Ihren code.
    • Sie bitte erzählen, wie Sie aufrufen ChatLog viewcontroller?
    • Wow die UICollectionViewLayout vs UICollectionViewFlowLayout mein Leben gerettet!

  2. 0

    Legen Sie die delegate und datasource der collectionView. Die datasource und delegate Methoden (numberOfItemsInSection, cellForItemAtIndexpath etc) werden nur aufgerufen, wenn Sie die delegate und datasource. Sie können es entweder im code oder in der storyboard(wenn Sie verwendet haben, storyboard design der collectionView)

    In der viewDidLoad Sie können hinzufügen

     collectionView.delegate = self
     collectionView.datasource = self
    • Dank ich versuchte dieses aber es hat nicht irgendeinen Unterschied gemacht
    • hat die cellForItemAtIndexpath und numberOfItemsInSection wird immer genannt? Wo haben Sie die collevtionView zu der Ansicht ?
    • numberOfItemsInSection wird aufgerufen, wenn die Zelle für das Element nicht genannt wird?
    • wo haben Sie die Bilder der collectionView ?
    • Aravind A R in func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { return CGSize(Breite: Blick.frame.Höhe, Höhe: 80) }? ich kann es immer noch nicht, dies herauszufinden, wurden auf das für Tage
    • eigentlich, wenn ich versuchte Ihren code, den ich in der Lage bin zu sehen, die collectionView mit 5 weißen Zellen Könnten Sie bitte erzählen, wie sind Sie aufrufen der ChatLog viewController

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.