Я должен сделать этот контроллер, который имеет ту же логику, что и профиль Instagram.
Я использую UICollectionViewCompositionalLayout и проблемы с логикой вкладок. Я использую одну ячейку сбора и меняю даты по таб. Но проблемы со смещением и анимацией. Как я могу это изменить или мне следует использовать другой способ?





Я успешно (и с головной болью :) использовал три UICollectionView в одном UIScrollView. Сделайте UIScrollView охватывающим всю высоту экрана и добавьте разбиение по страницам с помощью меню вкладок. Добавьте свое меню вкладок / содержимое заголовка над представлением прокрутки (так, чтобы оно находилось выше в иерархии представлений и покрыло верхнюю половину вашего UIScrollView. Используйте метод scrollViewDidScroll каждого представления коллекции, чтобы получить значение scrollView.contentOffset.y и соответствующим образом настроить привязку y вашего меню. значение contentOffset.y становится выше, чем ваше меню, прекратите настраивать его, чтобы «заблокировать» часть панели вкладок наверху. Уловка (и боль) заключалась в том, чтобы сделать первую ячейку в каждом представлении коллекции пустым заполнителем. Эта ячейка-заполнитель должна быть такой же размер вашего меню вкладок / содержимого заголовка, чтобы представление коллекции выглядело так, как если бы оно находилось в нужном месте и не было скрыто за содержимым меню вкладок / заголовка.
Пример реализации scrollViewDidScroll. tabMenuHeaderContentTopAnchor - это NSContstraint. 150 - это высота моего заголовка.
func scrollViewDidScroll(_ scrollView: UIScrollView) {
let constant = -scrollView.contentOffset.y
if constant < -150 { // This will lock your tab menu in place
tabMenuHeaderContentTopAnchor?.constant = -150
} else { // Otherwise, adjust the anchor to move with the collection view
tabMenuHeaderContentTopAnchor?.constant = constant
}
}
Преимущества этого я обнаружил:
UIScrollView по мере необходимостиЯ нашел минусы:
Может быть, использовать другой источник данных? Таким образом вы можете изменить даты объекта источника данных, а затем создать новый моментальный снимок для данных. Узнайте больше о различных источниках данных здесь: youtube.com/watch?v=o6hUFEXkf9w