Отобразить дочерний контроллер вида через панель навигации в topViewController из UINavigationController - PullRequest
0 голосов
/ 26 октября 2018

У меня просто есть такое требование.Мой 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)
}

1 Ответ

0 голосов
/ 28 октября 2018

This is how this popup child controller look like Так выглядит этот всплывающий дочерний контроллер. Вы видите, что он находится над NavigationBar, потому что он добавлен в NavigationController, но это приводит к другим проблемам во время установки различных контроллеров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...