Используя перетекающий макет
Можно расположить элементы в представлениях набора с помощью конкретного объекта расположения, UICollectionViewFlowLayout
класс. Перетекающий макет реализует основанное на строке расположение повреждения, что означает, что ячейки мест объекта расположения на линейном контуре и соответствуют стольким ячейкам вдоль той строки, сколько это может. Когда объект расположения исчерпывает комнату на текущей строке, это создает новую строку и продолжает процесс создания макета там. Рисунок 3-1 показывает то, на что это похоже для перетекающего макета, прокручивающего вертикально. В этом случае строки размечаются горизонтально с каждой новой строкой, расположенной ниже предыдущей строки. Ячейки в единственном разделе могут быть дополнительно окружены заголовком раздела и представлениями нижнего колонтитула раздела.
Можно использовать перетекающий макет для реализации сеток, но можно также использовать его для намного больше. Идея линейного расположения может быть применена ко многим различным проектам. Например, вместо того, чтобы иметь сетку элементов, можно скорректировать интервал для создания одной строки элементов вдоль размерности прокрутки. Элементы могут также быть различными размерами, который приводит к чему-то более асимметричному, чем традиционная сетка кроме того все еще имеет линейный поток к нему. Существует много возможностей.
Можно сконфигурировать перетекающий макет или программно или использующий Интерфейсного Разработчика в XCode. Шаги для конфигурирования перетекающего макета следующие:
Создайте перетекающий макет, возражают и присваивают его Вашему представлению набора.
Сконфигурируйте ширину и высоту ячеек.
Установите опции интервала (по мере необходимости) для строк и элементов.
Если Вы хотите заголовки раздела или разделяете нижние колонтитулы, укажите их размер.
Установите направление прокрутки для расположения.
Настройка атрибутов перетекающего макета
Объект перетекающего макета представляет несколько свойств для конфигурирования появления Вашего содержания. Когда установлено, эти свойства применяются ко всем элементам одинаково в расположении. Например, устанавливая размер ячейки с помощью itemSize
свойство объекта перетекающего макета заставляет все ячейки иметь тот же размер.
Если Вы хотите варьироваться интервал или размер элементов динамично, можно сделать настолько использующий методы UICollectionViewDelegateFlowLayout
протокол. Вы реализуете эти методы на том же объекте делегата, который Вы присвоили самому представлению набора. Если данный метод существует, вызовы объектов перетекающего макета, которые метод вместо того, чтобы использовать фиксированное значение он имеет. Ваша реализация должна тогда возвратить надлежащие значения для всех элементов в представлении набора.
Указание размера элементов в перетекающем макете
Если все элементы в представлении набора являются тем же размером, присваивают надлежащую ширину, и высота оценивает itemSize
свойство объекта перетекающего макета. (Всегда указывайте размер элементов в точках.) Это - самый быстрый способ сконфигурировать объект расположения для содержания, размер которого не варьируется.
Если Вы хотите указать различные размеры для своих ячеек, необходимо реализовать collectionView:layout:sizeForItemAtIndexPath:
метод на наборе просматривает делегата. Можно использовать предоставленную индексную информацию пути для возврата размера соответствующего элемента. Во время расположения, элементы центров объекта перетекающего макета вертикально на той же строке, как показано на рисунке 3-2. Полная высота или ширина строки тогда определяются самым большим элементом в той размерности.
Указание пространства между элементами и строками
Используя перетекающий макет, можно указать минимальный интервал между элементами на той же строке и минимальный интервал между последовательными строками. Следует иметь в виду, что интервал Вас обеспечивает, только минимальный интервал. Из-за того, как это размечает содержание, объект перетекающего макета может увеличить интервал между элементами к значению, больше, чем то, которое Вы указали. Когда размечаемые элементы являются различными размерами, объект расположения может так же увеличить фактический межстрочный интервал.
Во время расположения объект перетекающего макета добавляет элементы к текущей строке, пока нет недостаточно пространства, оставленного соответствовать всему элементу. Если строка является просто достаточно большой для адаптации целому числу элементов без дополнительного пространства, то пространство между элементами было бы равно минимальному интервалу. Если существует дополнительное пространство в конце строки, объект расположения увеличивает межэлемент, располагающий с интервалами, пока элементы не соответствуют равномерно в границах строки, как показано на рисунке 3-3. Увеличение интервала улучшает полный вид элементов и предотвращает большие разрывы в конце каждой строки.
Для интервала шпона объект перетекающего макета использует тот же метод, который это делает для интервала межэлемента. Если все элементы являются тем же размером, перетекающий макет в состоянии уважать минимальное значение межстрочного интервала абсолютно, и все элементы в одной строке, кажется, расположены с интервалами равномерно от элементов в следующей строке. Если элементы имеют различные размеры, фактический интервал между отдельными элементами может варьироваться.
Рисунок 3-4 демонстрирует то, что происходит с минимальным межстрочным интервалом, когда элементы имеют различные размеры. С по-другому размерными элементами объект перетекающего макета выбирает элемент от каждой строки, размерность которой в направлении прокрутки является самой большой. Например, в вертикально прокручивающем расположении, это ищет элемент в каждой строке с самой большой высотой. Это тогда устанавливает интервал между теми элементами к минимальному значению. Если элементы находятся на различных частях строки, как показано в числе, фактический межстрочный интервал, кажется, больше, чем минимум.
Как с другими атрибутами перетекающего макета, можно использовать фиксированные значения интервала или варьироваться значения динамично. Интервал строки и элемента обрабатывается на основе раздела разделом. Таким образом интервал строки и межэлемента является тем же для всех элементов в данном разделе, но может варьироваться между разделами. Вы устанавливаете интервал статически с помощью minimumLineSpacing
и minimumInteritemSpacing
свойства объекта перетекающего макета или использования collectionView:layout:minimumLineSpacingForSectionAtIndex:
и collectionView:layout:minimumInteritemSpacingForSectionAtIndex:
методы Вашего набора просматривают делегата.
Используя вставки раздела для тонкой настройки полей содержания
Вставки раздела являются способом скорректировать пространство, доступное для разметки ячеек. Можно использовать вставки для вставки пространства после представления заголовка раздела и перед его представлением нижнего колонтитула. Можно также использовать вставки для вставки пространства вокруг сторон содержания. Рисунок 3-5 демонстрирует, как вставки влияют на некоторое содержание в вертикально прокручивающем перетекающем макете.
Поскольку вставки сокращают сумму пространства, доступного для разметки ячеек, можно использовать их для ограничения числа ячеек в данной строке. Указание вставок в направлении непрокрутки является одним способом сжать пространство для каждой строки. При объединении той информации с надлежащим размером ячейки можно управлять числом ячеек на каждой строке.
Знание, когда разделить перетекающий макет на подклассы
Несмотря на то, что можно использовать перетекающий макет очень эффективно без разделения на подклассы, существуют все еще времена, когда Вы, возможно, должны были бы разделить на подклассы для получения поведения, Вам нужно. Таблица 3-1 перечисляет некоторые сценарии для который разделение на подклассы UICollectionViewFlowLayout
необходимо для достижения желаемого эффекта.
Сценарий | Разделение на подклассы подсказок |
---|---|
Вы хотите добавить новый дополнительный или представления художественного оформления к Вашему расположению | Стандартный класс перетекающего макета поддерживает только заголовок раздела и представления нижнего колонтитула раздела и никакие представления художественного оформления. Для поддержки дополнительный дополнительный и представления художественного оформления необходимо переопределить следующие методы как минимум:
В Вашем Для получения информации об обеспечении атрибутов для представлений во время расположения посмотрите Атрибуты макета Создания и Обеспечение Атрибутов макета для Элементов в Данном Прямоугольнике. |
Вы хотите настроить атрибуты макета, возвращаемые перетекающим макетом | Переопределите Для всестороннего dicussions того, что влекут за собой эти методы, посмотрите Атрибуты макета Создания и Обеспечение Атрибутов макета для Элементов в Данном Прямоугольнике. |
Вы хотите добавить новые атрибуты макета для своих ячеек и представлений | Создайте пользовательский подкласс Подкласс Необходимо также переопределить |
Вы хотите указать начальные или заключительные расположения для элементов, вставляемых или удаленных | По умолчанию, простое исчезают, анимация создана для вставляемых элементов или удалена. Для создания пользовательских анимаций необходимо переопределить некоторых или все следующие методы:
В Ваших реализациях этих методов укажите атрибуты, которые Вы хотите, чтобы каждое представление имело до того, чтобы быть вставленным или после того, как они удалены. Объект перетекающего макета использует атрибуты, которые Вы обеспечиваете для анимации вставок и удалений. При переопределении этих методов также рекомендуется переопределить Для получения дополнительной информации, о как вставки и работа удалений, посмотрите Более интересные Анимации Вставки и Удаления Создания. |
Существуют также экземпляры, в которых правильное решение должно создать пользовательский макет с нуля. Прежде чем Вы решите сделать это, не торопитесь, чтобы рассмотреть, действительно необходимо ли это. Перетекающий макет обеспечивает большое настраиваемое поведение, которое подходяще для многих различных видов разметок, и потому что это предоставлено для Вас, это просто в использовании и содержит многочисленную оптимизацию для создания его эффективным. Однако все это не должно говорить, что Вы никогда не должны создавать пользовательский макет, потому что существуют обстоятельства в который выполнение, так имейте абсолютный смысл. Перетекающий макет ограничивает направление прокрутки одним направлением, поэтому если Ваше расположение содержит содержание, простирающееся дальше, чем границы экрана в обоих направлениях, пользовательский макет имеет больше смысла реализовывать. Создание пользовательского макета является правильным решением, если Ваше расположение не является сеткой или основанным на строке расположением повреждения, как описано выше, или если элементы в Вашем расположении перемещаются настолько часто, что разделение на подклассы перетекающего макета является большим количеством compicated, чем создание Вашего собственного.
Для больше при создании пользовательского макета, посмотрите Пользовательские макеты Создания.