UICollectionView с настраиваемым макетом - невозможно добавить дополнительный просмотр в раскадровку - программирование
Подтвердить что ты не робот

UICollectionView с настраиваемым макетом - невозможно добавить дополнительный просмотр в раскадровку

Из Руководство по программированию коллекции для IOS:


Регистрация ваших ячеек и дополнительных просмотров

Вы можете запрограммировать ячейки и представления вашего вида коллекции или в файле раскадровки ваших приложений.

  • Чтобы настроить ячейки и представления в раскадровке:

    При настройке ячеек и дополнительных представлений в раскадровке вы делаете это, перетаскивая элемент в свой вид коллекции и настраивая его там. Это создает взаимосвязь между представлением коллекции и соответствующей ячейкой или представлением.

    • Для ячеек перетащите ячейку просмотра коллекции из библиотеки объектов и перетащите ее в свой вид коллекции. Установите для соответствующих значений пользовательский класс и идентификатор вида многократного использования коллекции.
    • Для дополнительных просмотров перетащите элемент "Повторное использование коллекции" из библиотеки объектов и оставьте его в виде коллекции. Задайте для соответствующего значения пользовательский класс и идентификатор вида многократного просмотра вашего представления.

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

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

Любые предложения о том, как это работает?

4b9b3361

Ответ 1

Вы можете сделать это, только если ваш макет является подклассом UICollectionViewFlowLayout.

  • Не указывать пользовательский макет в раскадровке.
  • Выберите раскладку и спроектируйте свое дополнительное представление.
  • Затем в вашем viewcontroller программно создайте и назначьте свой новый макет object to collectionview.
  • Вызов InvalidateLayout на вашем объекте макета
  • Используйте дополнительное представление, которое вы разработали в раскадровке, с помощью настраиваемого макета.

Это сработало для меня. Надеюсь, это поможет и другим!

Ответ 2

Вы не можете добавлять дополнительные виды в раскадровку с настраиваемым макетом. Дополнительные представления управляются объектом макета. Только макет знает свою позицию, номер.. Нет необходимости реализовывать дополнительные представления объектом макета. Это проблема объекта макета. UICollectionViewFlowLayout предоставляется дополнительный вид (заголовок/нижний колонтитул раздела). Таким образом, вы можете создать его в раскадровке. Если вы используете пользовательский макет, то как раскадровка знает, поддерживает ли он дополнительные представления. Так что это даст вам эту работу. Вам необходимо зарегистрировать класс /nib для дополнительных представлений.

Ответ 3

Этот комментарий от текущего верхнего ответа кажется лучшим решением.

Если ваш пользовательский макет является подклассом UICollectionViewFlowLayout, откройте редактор раскадровки и выберите раскладку (желтый куб) в списке левых объектов в объекте Collection View. Затем в "Identity Inspector" выберите свой класс потомков. Это. Не требуется изменение кода

- adnako