У меня просто есть такое требование.Мой topViewController содержит представление MapKit с прозрачной панелью навигации и кнопкой «Назад».Границы карты заполняют все доступное пространство представления topViewController.
Мне нужно отобразить более NavigationBar
PopupViewController
как дочерний элемент topViewController
.Таким образом, topViewController
является Контейнерным Контроллером и может иметь Контроллер Детского Представления PopupViewController
.Я знаю, как добавить дочерний View Controller в View Controller, но я не уверен, как сделать так, чтобы оно превысило NavigationBar
с UINavigationController
.
Таким образом, иерархия представления выглядит следующим образом:
UIWindow -> UINavigationController -> [StartController, MapController -> PopupViewController]
Итак, у меня здесь два контейнера.UINavigationController
и MapController
.MapController
является в то же время дочерним элементом UINavigationController
и родительским элементом PopupViewController
.Кто-нибудь знает, как отобразить это PopupViewController
более UINavigationController
UINavigationBar
?
Код:
override func viewDidLoad() {
super.viewDidLoad()
// Configure Navigation Bar So it is transparent
if let navBar = self.navigationController?.navigationBar {
let image = UIImage()
navBar.setBackgroundImage(image, for: .default)
navBar.shadowImage = image
navBar.isTranslucent = true
navBar.tintColor = UIColor.black
// Only Back Arrow without Back text
navBar.topItem!.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
}
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
showPopup()
}
func showPopup() -> Void {
let popupVC = PopupViewController()
self.popupViewController = popupVC
popupVC.delegate = self
self.addChildViewController(popupVC)
self.view.addSubview(popupVC.view)
NSLayoutConstraint.autoCreateAndInstallConstraints {
popupVC.view.autoPin(toTopLayoutGuideOf: self, withInset: 16)
popupVC.view.autoPinEdge(toSuperviewEdge: .leading, withInset: 16)
popupVC.view.autoPinEdge(toSuperviewEdge: .trailing, withInset: 16)
}
self.view.layoutIfNeeded()
popupVC.didMove(toParentViewController: self)
}