UICollectionView с настраиваемым макетом - невозможно добавить дополнительный просмотр в раскадровку
Из Руководство по программированию коллекции для IOS:
Регистрация ваших ячеек и дополнительных просмотров
Вы можете запрограммировать ячейки и представления вашего вида коллекции или в файле раскадровки ваших приложений.
-
Чтобы настроить ячейки и представления в раскадровке:
При настройке ячеек и дополнительных представлений в раскадровке вы делаете это, перетаскивая элемент в свой вид коллекции и настраивая его там. Это создает взаимосвязь между представлением коллекции и соответствующей ячейкой или представлением.
- Для ячеек перетащите ячейку просмотра коллекции из библиотеки объектов и перетащите ее в свой вид коллекции. Установите для соответствующих значений пользовательский класс и идентификатор вида многократного использования коллекции.
- Для дополнительных просмотров перетащите элемент "Повторное использование коллекции" из библиотеки объектов и оставьте его в виде коллекции. Задайте для соответствующего значения пользовательский класс и идентификатор вида многократного просмотра вашего представления.
В моем раскадровке мне не удается отбросить коллекцию повторно используемого вида в виде коллекции, пока макет установлен на "Пользовательский" вместо "Поток". Если я отброшу его, когда макет настроен на поток, он исчезнет, как только я верну его в обычай.
Если я вывожу его за пределы представления коллекции, как объект верхнего уровня, он не используется во время выполнения, хотя и класс, и идентификатор установлены правильно. Вместо этого я получаю сообщение о том, что мне нужно зарегистрировать дополнительное представление. Если я зарегистрирую его вручную, он хочет использовать мой визуальный дизайн из раскадровки.
Любые предложения о том, как это работает?
Ответы
Ответ 1
Вы можете сделать это, только если ваш макет является подклассом UICollectionViewFlowLayout.
- Не указывать пользовательский макет в раскадровке.
- Выберите раскладку и спроектируйте свое дополнительное представление.
- Затем в вашем viewcontroller программно создайте и назначьте свой новый макет object to collectionview.
- Вызов InvalidateLayout на вашем объекте макета
- Используйте дополнительное представление, которое вы разработали в раскадровке, с помощью настраиваемого макета.
Это сработало для меня. Надеюсь, это поможет и другим!
Ответ 2
Вы не можете добавлять дополнительные виды в раскадровку с настраиваемым макетом. Дополнительные представления управляются объектом макета. Только макет знает свою позицию, номер.. Нет необходимости реализовывать дополнительные представления объектом макета. Это проблема объекта макета. UICollectionViewFlowLayout
предоставляется дополнительный вид (заголовок/нижний колонтитул раздела). Таким образом, вы можете создать его в раскадровке. Если вы используете пользовательский макет, то как раскадровка знает, поддерживает ли он дополнительные представления. Так что это даст вам эту работу. Вам необходимо зарегистрировать класс /nib для дополнительных представлений.
Ответ 3
Этот комментарий от текущего верхнего ответа кажется лучшим решением.
Если ваш пользовательский макет является подклассом UICollectionViewFlowLayout, откройте редактор раскадровки и выберите раскладку (желтый куб) в списке левых объектов в объекте Collection View. Затем в "Identity Inspector" выберите свой класс потомков. Это. Не требуется изменение кода
- adnako