UINavigationController Большой заголовок и несколько UIScrollViews / UITableViews - PullRequest
0 голосов
/ 22 декабря 2019

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

Идея состоит в том, чтобы иметь сегментированный элемент управления с двумя/ три сегмента, которые будут показывать / скрывать просмотры таблиц и / или другие прокрутки.

Моя проблема заключается в том, что для работы больших заголовков (т. Е. Развернуть / свернуть при просмотре таблицы / прокрутки вверх и вниз) ожидается, что первое представление - это прокручиваемое представление таблицы / прокрутки. Это хорошо работает для моего начального табличного представления, но как только я перехожу (что делается простым скрытием / показом другого табличного представления) ко второму / третьему, он перестает работать (потому что последующие табличные представления не являются первыми в иерархии представлений). Вот пример:

Storyboard Example

Как видно из скриншота выше, я создал два вида прокрутки, которые управляются сегментированным элементом управления. Если я просто покажу / скрою их, во втором просмотре прокрутки не будет большого свертывания заголовка, поскольку, как упоминалось выше, UINavigationController всегда ожидал, что прокручиваемое представление будет первым в иерархии представлений, чтобы это работало.

Чтобы приблизиться к тому, что мне нужно, я также отправляю подпредставление, которое должно отображаться «назад»:

self.view.sendSubviewToBack(secondScrollView)

Это само по себе не сработало, к сожалению, так как кажется, что новый вид прокруткиUINavigationController, первый элемент иерархии представления, все еще помнит «старую» иерархию. Мне удалось «обмануть» UINavigationController, чтобы обновить и распознать новую иерархию с помощью приведенного ниже кода:

self.navigationController?.navigationBar.prefersLargeTitles = false
self.navigationController?.navigationBar.prefersLargeTitles = true

, который, кажется, в конечном итоге заставляет Большие Заголовки сжиматься и расширяться при необходимости, однако возникает новая проблемабыл введен. При переходе ко второму просмотру прокрутки его исходное состояние свернуто, а не раскрывается:

Collapsed second scrollview

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

view controller code

В основном я боролся с этим некоторое время, и у меня нет идей ... В идеале, я быкак чистое решение (т. е. включение и выключение prefersLargeTitles для того, чтобы эта работа выглядела очень хакерской!), но также заставляет работать текущее решение: -)

Я рассматривал другие решения, такие как наличие единого верхнего UIScrollViewи переключение содержимого изнутри (т.е. добавление / удаление представлений или показ / скрытие / или даже встраивание представления контейнера), однако, поскольку мне нужно будет работать и с таблицами, я не думаю, что будет хорошей идеей вставлять таблицув просмотре прокрутки (поскольку у самой таблицы есть прокрутка для ее содержимого).

...