Ячейки просмотра коллекции не отображаются

Я хочу отобразить столько collectionViewCells с buttons, сколько строк в моем массиве. но когда я запускаю симулятор, отображается только фон CollectionView, но не отображаются ячейки. В чем может быть ошибка?

Вот код из моего CollectionViewController, который я прикрепил к CollectionView в main.storyboard:

class CollectionViewController: UICollectionViewController {

var Array = [String]()

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    Array = ["1","2","3","4","5"]
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func collectionView(collectionView: UICollectionView, numberOfItemsSection section: Int) -> Int {
    return Array.count
}

override func
    collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {

        var cell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! UICollectionViewCell

        var button = cell.viewWithTag(1) as! UIButton
        button.titleLabel?.text = Array[indexPath.row]

        return cell
}

}

Это соединения контроллера представления коллекции:

связи

Контроллер представления на раскадровке:

контроллер просмотра


person maidi    schedule 23.11.2015    source источник
comment
Это может быть проблема с автоматической компоновкой, если вы используете раскадровку. Можете ли вы показать скриншот контроллера представления на раскадровке, а также скриншоты параметров макета?   -  person Subash    schedule 24.11.2015
comment
Я пробовал с отключенной автоматической раскладкой, и все равно была та же проблема. Что вы имеете в виду под параметрами макета? Я добавил скриншот контроллера представления на раскадровке   -  person maidi    schedule 24.11.2015
comment
Вы не забыли установить пользовательский класс контроллера в StoryBoard на свой CollectionViewController?   -  person Michael    schedule 26.11.2015
comment
Вы проверили, выполняется ли ваш func collectionView (collectionView: UICollectionView, раздел numberOfItemsSection: Int)?   -  person nigelman    schedule 01.12.2015
comment
Ваш UIViewController внутри UITabBarController? Не могли бы вы проверить, связан ли этот вопрос с вашим: stackoverflow.com/q/33177968/1171404   -  person Sebastian Krogull    schedule 01.12.2015
comment
Выглядит вредно... var Array = [String]().   -  person Wanbok Choi    schedule 02.12.2015


Ответы (14)


Вы установили CollectionViewController в инспекторе идентификации раскадровки? :)

И я бы попробовал вызвать reloadData() после того, как вы измените данные в методе viewDidLoad.

надеюсь, это поможет

person Pavel Smejkal    schedule 25.11.2015
comment
можете ли вы указать, как установить CollectionViewController для инспектора идентификации раскадровки? - person BigBoy1337; 07.05.2018

func layoutCells() {
        let layout = UICollectionViewFlowLayout()
        layout.sectionInset = UIEdgeInsets(top: 0, left: 10, bottom: 10, right: 10)
        layout.minimumInteritemSpacing = 5.0
        layout.minimumLineSpacing = 5.0
        layout.itemSize = CGSize(width: (UIScreen.mainScreen().bounds.size.width - 40)/3, height: ((UIScreen.mainScreen().bounds.size.width - 40)/3))
        collectionView!.collectionViewLayout = layout
    }

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

func viewDidLoad() {
    layoutCells()
}

Если это работает, вы можете изменить параметры макета в соответствии с вашими потребностями.

person Subash    schedule 23.11.2015
comment
К сожалению, есть еще та же проблема. В Симуляторе отображается только фон - person maidi; 24.11.2015
comment
Он показывает фон ячейки или вид? - person Subash; 24.11.2015
comment
Работает как драгоценный камень! Однако для меня приложение вылетает, когда я вставляю layoutCells() в метод viewDidLoad(), поэтому я пропустил эту часть. - person Annabelle Sykes; 31.10.2016

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

Выберите CollectionViewCell

Найдите эти значения в инспекторе размеров

person Ges83    schedule 16.11.2016

Проблема заключается в установке заголовка на кнопку, используйте следующий код.

override func
    collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {

        var cell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! UICollectionViewCell

        var button = cell.viewWithTag(1) as! UIButton
        //button.titleLabel?.text = Array[indexPath.row]
        button.setTitle(Array[indexPath.row], forState: UIControlState.Normal)
        return cell
}

Надеюсь, поможет

person Bhavin Kansagara    schedule 02.12.2015

убедитесь, что вы настраиваете выходы CollectionView (источник данных, делегат) в своей раскадровке, как показано ниже.

ссылка на полезное изображение

person Hamid Reza Ansari    schedule 10.04.2018
comment
Это была проблема, с которой я столкнулся. - person Harsh Khajuria; 13.05.2019

Я удалил этот код из моего файла CollectionViewController.m

[self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:reuseIdentifier];

и появилась ячейка

person Asad Mehmood    schedule 05.06.2020

Идеи:

  • Проверьте, настроен ли ваш идентификатор повторного использования ячейки.
  • Проверьте, правильно ли вы установили подкласс представления коллекции в раскадровке.
  • Поместите операторы print в свою функцию cellForItemAtIndexPath, чтобы узнать, вызывается ли она когда-либо.
  • Не уверен, что это должно быть проблемой, но Array на самом деле является типом в Swift. Использование этого имени в качестве имени вашей переменной может каким-то образом нарушить логику. Переименуйте его в array (нижний регистр). Я считаю, что это лучшая практика для имен переменных в любом случае.
  • Сделайте что-нибудь еще с ячейкой в ​​cellForItemAtIndexPath, например, измените цвет фона. Если это работает, возможно, что-то не так с тем, что вы делаете с тегами.
person Kannan Chandrasegaran    schedule 27.11.2015

Ваша проблема в

func collectionView(collectionView: UICollectionView, numberOfItemsSection section: Int)

подпись метода. Это неверно. Так должно быть

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

и со спецификацией override (потому что UICollectionViewController имеет собственную, поэтому вы получаете пустую коллекцию).

override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
  return Array.count
}
person rkyr    schedule 01.12.2015

Выберите UIButton в раскадровке, отметьте installed внизу слева на изображении ниже.

введите здесь описание изображения

person William Hu    schedule 02.12.2015

Убедитесь, что для ячейки задан правильный идентификатор повторного использования.

введите здесь описание изображения

person Subash    schedule 02.12.2015

Прежде всего проверьте, использовали ли вы этот метод: -

override func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
return searches.count
}

В каждом разделе есть один поиск, поэтому количество разделов — это количество поисковых запросов. поэтому мы также можем использовать этот метод по мере необходимости. По умолчанию мы можем использовать retuen 1

И следуйте шагу по ссылке для лучшего решения Проверьте эту ссылку< /а>

person Rushang Prajapati    schedule 01.12.2015
comment
Реализация протокола по умолчанию возвращает 1, поэтому это не может быть так. - person Tomasz Bąk; 02.12.2015
comment
о, да @TomaszBąk В каждом разделе есть один поиск, поэтому количество разделов — это количество поисковых запросов. поэтому мы также можем использовать этот метод по мере необходимости. И спасибо за исправление, потому что это помогает другим лучше понять. - person Rushang Prajapati; 03.12.2015

Убедитесь, что ячейка не скрыта. Добавьте этот код ниже

    cell.isHidden = false
person Nikhil Chandra    schedule 06.07.2020

Элементы в ячейке не отображались для меня, потому что я не установил tamic для каждого из добавленных подпредставлений при программном добавлении подпредставлений.

subview.translatesAutoresizingMaskIntoConstraints = false
person Dave Dempsey    schedule 21.10.2020

У меня были пустые проблемы с collectionViewCell, пока я не понял, что моего viewController нет в файле, я не знал, как этот файл оказался мусором, мне потребовалось время, чтобы понять это.

person Dambar B. Bista    schedule 24.10.2020