Черный экран при переходе на другую вкладку и обратно - PullRequest
0 голосов
/ 15 января 2019

У меня есть несколько вкладок, и каждая вкладка представляет два или три контроллера представления. Я не использую навигационные панели / контроллеры. Сегменты продвижения вперед представлены модально и в текущем контексте. У меня также есть раскручивающиеся сегменты, которые подключаются к соответствующим IBActions, которые определяют элемент панели вкладок для представления. У меня также есть функция viewWillDisappear в представленном Viewcontroller следующим образом:

override func viewWillDisappear(_ animated: Bool) {
self.dismiss(animated: true, completion: nil)
super.viewWillAppear(true)
}

Наконец, представляемый Viewcontroller настроен для определения контекста. Эта конфигурация позволяет мне переключаться между различными контроллерами представления, сохраняя при этом постоянную видимость нижней панели вкладок.

Это решение прекрасно работает, если элемент панели вкладок содержит сегменты, которые имеют глубину двух контроллеров представления. Однако решение перестает работать, когда глубина составляет три или более видов. Например, макет выглядит следующим образом:

TabA ---> ViewA ---> ViewB
TabB ---> ViewC ---> ViewD ---> ViewE
TabC ---> ViewF
  1. Я выбираю TabA, и затем могу перейти в ViewA и затем ViewB.
  2. Из ViewB я перехожу на TabB и на TabC.
  3. Я возвращаюсь в TabA, и представление корректно сбрасывается в ViewA (а не в ViewB, на котором я остановился, когда переходил к TabB на шаге 2).

  4. Ранее без описанной выше конфигурации я получал черный экран при возвращении в TabA. Здесь ViewB все еще был выбран, и он не был сброшен до ViewA. При нажатии на ViewA я получаю черный экран.

  5. Тем не менее, я все еще получаю черный экран, когда вкладка имеет три слоя глубиной, в то время как поведение решено для вкладок, которые имеют два слоя.

  6. В случае сбоя я делаю следующее: 6а. Я выбираю TabB и перехожу к ViewC, затем ViewD. 6b. Из ViewD я перехожу в TabC. 6с. Я возвращаюсь в TabB. Вид D все еще активен. 6d. Я выбираю ViewC из TabB и получаю черный экран.

Моя рабочая конфигурация (с двумя вкладками) выглядит следующим образом:

TabA ---> ViewA (определяет контекст, переход модального / текущего контекста к ViewB и имеет IBAction для обработки установки элемента вкладки при возврате из ViewB) ---> ViewB (имеет переход к обратному переходу к IBAction, и имеет функцию viewWillDisappear, как указано выше).

Неисправная конфигурация выглядит следующим образом:

TabB ---> ViewC (defines context, modal/current context segue to ViewD, IBAction to handle the return from ViewD) 
---> ViewD (defines context, modal/current context segue to ViewE, IBAction to handle the return from ViewE, viewWillDisappear function from above, unwind segue back to ViewC) 
 ---> ViewE (unwind segue back to ViewD, and the viewWillDisappear code from above).

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

...