UICollectionView отображается пустым и не показывает никаких ячеек

#swift

Вопрос:

Я просто тестирую код, чтобы проверить, может ли он загрузить представление коллекции. Но удостоверение личности ничего не показывает. Пожалуйста, посмотрите на приведенный ниже код и дайте мне знать, где я ошибаюсь.

 import UIKit    private let reuseIdentifier = "Cell" class FeedController: UICollectionViewController {     //MARK: - Lifecycle  override func viewDidLoad() {  super.viewDidLoad()  configureUI()  collectionView.dataSource = self  collectionView.delegate = self  self.collectionView.reloadData()  }      //MARK: - Helpers    func configureUI() {  collectionView.backgroundColor = .white  collectionView.register(UICollectionViewCell.self, forCellWithReuseIdentifier: reuseIdentifier)    } } //MARK:- UICollectionViewDataSource  extension FeedController {  override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -gt; Int {  return 5  }    override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -gt; UICollectionViewCell {  let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath)  cell.backgroundColor = .systemRed  return cell  } }  extension FeedController: UICollectionViewDelegateFlowLayout {  func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -gt; CGSize {  return CGSize(width: view.frame.width, height: 200)  } }  

Комментарии:

1. Вы не должны регистрировать значение по умолчанию UICollectionVievCell

2. Это ничего не меняет.

3. @vadian есть ли что-нибудь еще, что я могу сделать, чтобы проверить, работает ли это?

Ответ №1:

Установите где-нибудь точку останова viewDidLoad , чтобы проверить, вызывает ли она вообще какой-либо код этого класса при запуске приложения.

Обычно вы получаете сообщение об ошибке при установке dataSource и delegate в a UICollectionViewController , потому что они уже установлены контроллером. Из-за этого переместите дополнительные строки в основной класс и удалите расширение.

Ответ №2:

Вам необходимо инициализировать FeedController с помощью public init(collectionViewLayout layout: UICollectionViewLayout) инициализатора UICollectionViewController, иначе у вас нет макета, назначенного UICollectionView.

Где бы вы ни занимались FeedController() , вы должны делать FeedController(collectionViewLayout: UICollectionViewFlowLayout()) или какой-то пользовательский UICollectionViewLayout.