Конфигурация страницы профиля iOS Twitter

Я пытаюсь структурировать страницу, аналогичную странице профиля Twitter. Похоже, что они используют базовый UITableView. Верхний профиль - это только tableHeaderView. Закладки UISegmentedControl находятся внутри SectionRowHeader, поэтому при прокрутке он придерживается вершины. И твиты - это только ячейки внутри этого раздела. И если вы переключаете вкладки, кажется, что они просто меняют базовые данные и перезагружают таблицу.

RRbMJ.png

Однако, если вы играете со страницей, вы заметите, что изменение вкладок сохраняет предыдущую позицию прокрутки. И если вы перейдете назад к вершине на одной вкладке, то, конечно, другую вкладку нужно прокрутить вверх, иначе она будет прокручиваться под заголовком. Кроме того, если вы посмотрите внимательно, нижняя часть (твиты) имеет свою собственную полосу прокрутки после запуска прокрутки. Таким образом, похоже, что это его собственный планшет. Так будет ли это новое представление таблицы внутри ячейки главной страницы? И если это то, что они делают, то прокрутка между ними. Вы можете прокручивать нижнюю часть вверх, и только после того, как вкладки будут прикреплены к верхней части, прокрутите твиты под ней.

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

Кто-нибудь имеет представление о структуре, которую они используют для настройки такой страницы?

Ответ 1

Я на 99% уверен, что они просто настраивают вставки прокрутки, когда вы просматриваете таблицу:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    CGFloat const visibleHeaderHeight = 0.0; // your logic here
    UIEdgeInsets const insets = UIEdgeInsetsMake(visibleHeaderHeight, 0.0, 0.0, 0.0);

    self.scrollView. scrollIndicatorInsets = insets;
}

Также я уверен, что они используют табличное представление сгруппированного стиля из-за секционирования, поэтому вам нужно будет создать липкий заголовок самостоятельно. Вы также можете сделать это в -scrollViewDidScroll:.


Если вы хотите разбить вкладки на отдельные контроллеры, я бы рекомендовал следующую настройку:

  • есть контроллер контейнера, управляющий видом заголовка, содержащим вкладки
  • использовать UIViewController сдерживание для подключения активного контроллера представления.
  • Подпишитесь на просмотр прокрутки активного контроллера просмотра contentOffset и соответствующим образом настройте вставку индикатора прокрутки и положение липкого заголовка.

Ответ 2

Я попытался объяснить немного здесь.

После долгих долгих расследований именно так я добился твиттера поведение профиля.

  • UnderlayScrollView
  • MasterScrollView
    • Заголовок ViewController
    • Нижний ViewController
      • PagerTabItems [CollectionView]
      • UIPagerController или любая другая горизонтальная прокрутка (пергамент, XLPagerTabStrip).

UnderlayScrollView отвечает за управление жестом прокрутки. его contentoffset используется для настройки внутренней прокрутки contentOffsets. Содержание лежащего в основе свитка такое же, как у основного свитка contentsize.

Смотрите исходный код на GitHub для получения дополнительной информации. нажмите