Добавление пользовательских всплывающих окон не заполняет полный вид iOS, Swift - PullRequest
0 голосов
/ 11 марта 2020

Я создал UIViewControlller и спроектировал в раскадровке, я хочу показать его как всплывающее окно для моего другого представления. Я использовал следующее, чтобы показать как всплывающее окно:

 guard let popupVC = UIStoryboard(name: "More", bundle: nil).instantiateViewController(withIdentifier: "LanguageSelectionViewController") as? LanguageSelectionViewController else{
            fatalError("Unexpected destination VC")
        }

        self.addChildViewController(popupVC)

        popupVC.view.frame = self.tableView.frame


        print("POPUP Frame VIEW   -- \(popupVC.view.frame)")
        print("SElF VIEW   -- \(self.tableView.frame)")

        popupVC.view.frame = self.tableView.frame


        print("POPUP Frame VIEW   -- \(popupVC.view.frame)")
        print("SElF VIEW   -- \(self.view.frame)")

        popupVC.modalPresentationStyle = .currentContext
        popupVC.modalTransitionStyle = .crossDissolve
        popupVC.view.bindFrameToSuperviewBounds()
        self.view.addSubview(popupVC.view)
        popupVC.didMove(toParentViewController: self)

Это работает правильно, но на моем устройстве половина пространства экрана не заполняется всплывающим окном.

Screenshot where half screen is not filled

Ответы [ 3 ]

1 голос
/ 11 марта 2020

Вы пытались использовать функцию present ()? Примерно так:

let popupVC = PopupViewController()
popupVC.modalPresentationStyle = .overFullScreen
popupVC.modalTransitionStyle = .crossDissolve
self.present(popupVC, animated: true, completion: nil)

Мне проще проектировать контроллеры представлений в их собственных файлах xib, и это позволяет инициализировать, как в моем примере, вместо того, чтобы использовать раскадровку в коде, но это личное предпочтение. Если он все еще не работает, возможно, убедитесь, что ограничения макета для фона всплывающего окна правильные, поэтому он фактически заполняет своего родителя.

0 голосов
/ 11 марта 2020

Вам нужно поменять местами две строки:

self.view.addSubview(popupVC.view)
popupVC.view.bindFrameToSuperviewBounds()

Вы не можете привязать представление к его суперпредставлению, если оно еще не было добавлено.

0 голосов
/ 11 марта 2020

Прежде всего, вам нужно нажать на всплывающее окно (раскадровка или xib) и установить для него цвет фона .clear Color

Затем сделать его в центре. как popupVC.center = self.view.center

это просто руководство, которое вы можете изменить и установить имена соответственно. Но мой вопрос, почему вы используете storyboard, почему не создали Xib or View

Надеюсь, это послужит вашей цели.

...