Нажмите новый UIViewController с прозрачностью - PullRequest
0 голосов
/ 26 сентября 2019

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

enter image description here

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

enter image description here

Согласно Apple ,

При представлении контроллера представления с использованием стиля UIModalPresentationFullScreen UIKit обычно удаляет представлениябазовый контроллер представления после завершения анимации перехода.Вы можете предотвратить удаление этих представлений, указав вместо этого стиль UIModalPresentationOverFullScreen.Вы можете использовать этот стиль, когда представленный контроллер представления имеет прозрачные области, через которые просвечивает основное содержимое.

Я определяю modalPresentationStyle представленного (выдвинутого) контроллера представления как UIModalPresentationOverFullScreen во время действия кнопкиэто инициализирует push:

let semiController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "SemiViewController")
    semiController.modalPresentationStyle = .overFullScreen
    self.navigationController?.pushViewController(semiController, animated: true)

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

Спасибо.

1 Ответ

1 голос
/ 26 сентября 2019

Вы должны представить свой контроллер, так как этот modalPresentationStyle и modalTransitionStyle будут влиять, только если вы выберете настоящий модальный метод.Убедитесь, что фоновый вид основного окна полупроводника остается прозрачным или менее прозрачным

let semiController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "SemiViewController")
semiController.modalPresentationStyle = .overCurrentContext
semiController.modalTransitionStyle = .crossDissolve
self.present(semiController, animated: true)
...