Jannis хорошо поймал общую стратегию. Это не работает для меня в IOS 9.x с быстрым 3. На предлежащей ВК, действие запустить представленный ВК аналогично тому, что было представлено выше, с некоторыми очень незначительными изменениями, как показано ниже:
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let pvc = storyboard.instantiateViewController(withIdentifier: "SomeScreen") as SomeViewController
pvc.modalPresentationStyle = .custom
pvc.transitioningDelegate = self
present(pvc, animated: true, completion: nil)
Чтобы реализовать UIViewControllerTransitioningDelegate
на том же предъявляющем VC, синтаксис совершенно другой, как указано в ответе SO в https://stackoverflow.com/a/39513247/2886158. Это была самая сложная часть для меня. Вот реализация протокола:
func presentationController(forPresented presented: UIViewController, presenting: UIViewController?, source: UIViewController) -> UIPresentationController? {
return HalfSizePresentationController(presentedViewController:presented, presenting: presenting)
}
Для UIPresentationController
класса, я должен был переопределить переменную frameOfPresentedViewInContainerView
, а не метод, как показано ниже:
class HalfSizePresentationController: UIPresentationController {
override var frameOfPresentedViewInContainerView: CGRect {
return CGRect(x: 0, y: 0, width: containerView!.bounds.width, height: containerView!.bounds.height/2)
}
}
Были некоторые вопросы о том, чтобы закрыть вид после презентация. Вы можете реализовать всю обычную логику на своем представленном VC, как и любой другой VC. Я выполняю действие, чтобы отклонить представление в SomeViewController
, когда пользователь заходит за пределы представленного VC.
вы пробовали настройки стиля представления в течение текущего контекста? – boidkan
@boidkan да, я пробовал каждый – Anton
Вы возились с макетом? Как изменение его на обычный, все или компактный. – boidkan