В моем контроллере просмотра есть следующий макет. Я хочу, чтобы иметь возможность прокручивать по вертикали с прокруткой заголовка представления, а UISegmentedControl - в верхней части представления, за исключением того, что оставшийся свиток должен обрабатываться в виде коллекции.
Однако я немного смущен относительно того, какой лучший подход к реализации этого макета.
Я попробовал несколько реализаций со смешанными результатами:
-
UIScrollView с UICollectionView в качестве подзонов: UIScrollView как родительское представление с заголовком, сегментированные элементы управления и коллекции в качестве дочерних элементов управления. Проблема с этим подходом заключается в том, что вложенная прокрутка не работает корректно. Чтобы иметь возможность прокручивать UIScrollView, крана должна находиться вне области CollectionView, иначе только свитки CollectionView и заголовок и сегментированный элемент управления не будут перемещаться.
-
Заголовок и сегментированный контроль в ячейке заголовка: Я попробовал другой подход, используя один CollectionView. Я добавил заголовок и Segmented Control в качестве подзонов одной ячейки заголовка представления коллекции. Когда измененное значение сегментации было изменено, я переключаю свойство источника данных CollectionView, чтобы получить 3 представления, необходимые для представления коллекции. Визуально все работает отлично. Единственная проблема здесь - условие гонки при быстром переключении между первой, второй и третьей вкладками. Я загружаю данные из веб-службы, если веб-служба требует времени и по-прежнему загружает данные, и я быстро переключаю вкладки, тогда я сталкиваюсь с ошибками, где возвращаемые данные предназначены для другого представления коллекции, чем то, что в настоящее время выбрано, много проблем с синхронизацией не в порядке.
-
Обновить постоянное значение для ограничения Autolayout: Другой подход, который я пытался, - изменить постоянное значение ограничения автоматического макета, применяемого к представлению "Заголовок". Затем я добавил жест в представление контроллера просмотра для отслеживания прокрутки, так как пользователь прокручивает по вертикали. Я настраиваю константу ограничения автоматического макета, чтобы ячейка "header" выходила из поля зрения. Опять же, это не работает так гладко, но я полагаю, что я могу настроить его, но это вроде как взломать.
Есть ли лучший способ реализовать этот макет?