Графический артефакт на панели навигации и панели инструментов при модальном представлении UIPageViewController через UITableViewController - PullRequest
0 голосов
/ 11 мая 2018

Мое приложение просто UITableViewController, встроенное в UINavigationController.В основном методе контроллера табличного представления viewDidLoad() я проверяю UserDefaults на логический ключ, чтобы увидеть, является ли это первым запуском.Если это так, я модально представляю UIPageViewController для учебника и адаптации.

self.present(tutorialViewController, animated: true, completion: nil)

Однако под экранами учебника контроллеры основного вида navigationBar и toolBar меняются на светло-серый цвет дос таблицей взаимодействуют, затем они мгновенно возвращаются к полупрозрачному виду по умолчанию, который я хочу.Я не могу понять, что является причиной этого.Я попытался установить modalPresentationStyle в .overCurrentContext, но это не помогло.

Я также получаю предупреждение, что представление контроллеров представления на контроллерах отдельного представления не рекомендуется.Это предупреждение исчезнет, ​​если я представлю его следующим образом:

self.parent?.present(tutorialViewController, animated: true, completion: nil)

Это кажется грязным, и графический артефакт остается.

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

1 Ответ

0 голосов
/ 13 мая 2018

Я нашел решение, основанное на некотором обсуждении здесь .

Я представлял контроллер модального представления из метода viewDidLoad(), когда мне следовало сделать это в viewDidAppear().

Я также оживлял свое табличное представление, чтобы оно не было видно перед экранами учебника.Вместо этого я теперь использую блокирующее представление, настроенное на тот же цвет фона, что и в моем учебном контроллере.В viewDidLoad() я делаю это:

let blockingView = UIView()
blockingView.frame = UIApplication.shared.keyWindow?.frame
UIApplication.shared.keyWindow?.addSubview(blockingView)

Это означает, что вид блокировки появляется перед навигационным контроллером.Я исчезаю и удаляю blockingView как раз перед тем, как представить учебник в viewDidAppear().

...