В настоящее время я пытаюсь реализовать пользовательский UIViewController
, который имеет UINavigationController
внутри. Это модальное представление, которое будет отображаться в нижней части экрана, и у пользователя есть различные варианты навигации внутри этого модального представления. Фон UIViewController
установлен на прозрачный, поэтому он отображается как наложение уже видимого экрана.
Мне удалось настроить и представить мой UIViewController
следующим образом:
let modalController = ModalController()
modalController.modalPresentationStyle = .overCurrentContext
self.present(modalController, animated: true, completion: nil)
Внутри этого UIViewController
Я делаю это:
var popupController: UINavigationController = {
let popupController = UINavigationController(rootViewController: ModalStart())
return popupController
}()
var modalPopup: UIView = {
let modalPopup = UIView()
modalPopup.translatesAutoresizingMaskIntoConstraints = false
modalPopup.backgroundColor = .white
modalPopup.isUserInteractionEnabled = true
return modalPopup
}()
view.addSubview(modalPopup)
modalPopup.addSubview(popupController.view)
modalPopup.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
modalPopup.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
modalPopup.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
modalPopup.heightAnchor.constraint(equalToConstant: 500).isActive = true
Это работает нормально, но, как вы уже догадались, высота установлена на фиксированную константу 500. Это работает на моем iPhone X, но, например, будет отличаться на iPhone 5s. Это также не позволяет мне соответствующим образом изменять высоту, когда я перемещаюсь по UINavigationController
, так как высота другого viewControllers
будет отличаться.
Кто-нибудь знает, как мне этого добиться? Я уже добавил пользовательский ContainerView внутри моего rootViewController
(ModalStart), но у меня нет прямого доступа к popupController.containerView.frame.height (так как popupController равен UINavigationController
). Я также пытался сделать heightAnchor переменной и установить ее в viewDidLayoutSubviews()
в ModalStart (), но это тоже не работает и срабатывает постоянно с разной высотой (если я печатаю высоту, иногда возвращается 480, иногда 0, очень странное поведение там).
Мне интересно, как лучше всего подойдет мой конкретный случай. Все, что направляет меня в правильном направлении, очень ценится!