Добавление дочернего контроллера представления в подпредставление, но сделать его модальным для всего представления без контроллера навигации - PullRequest
0 голосов
/ 27 декабря 2018

Использование Xcode 10+, Swift 4, iOS 11.4 +

Сначала позвольте мне сказать, что я не использую Navigation Controller - я добавляю ViewController к другому как ребенок, используя этот основной код:

topController.addChildViewController(childVC)
topController.view.addSubview(childVC.view)
childVC.didMove(toParentViewController: topController)

Дочерний объект меньше родительского и имеет несколько кнопок, одна из которых будет анимировать его вне поля зрения.

Я не использую подарок/ dismiss, поскольку он всегда покрывает весь экран.

Я бы хотел, чтобы он был модальным - после того, как он будет анимирован на месте, ничто иное на экране (за ним) не должно использоваться, пока он не будет анимирован вне поля зрения.

Как я могу сделать childVC модальным?

Ответы [ 2 ]

0 голосов
/ 28 декабря 2018

1) Дочерний объект меньше родительского: -

Вам просто нужно обновить дочерний фрейм, аналогичный родительскому.

topController.addChildViewController(childVC)
topController.view.addSubview(childVC.view)
**childVC.view.frame.size.height = self.view.frame.size.height**
childVC.didMove(toParentViewController: topController)

2) имеет несколько кнопок,одна из которых будет анимировать его вне поля зрения: -

Установить Click Event на кнопках, подобных этой, чтобы удалить дочернее представление от родителя

self.willMove(toParentViewController: nil)
self.view.removeFromSuperview()
self.removeFromParentViewController() 
0 голосов
/ 27 декабря 2018

Вы можете попробовать добавить контроллер в окно UIWindow, которое вместо этого имеет windowLevel = UIWindowLevelAlert + 1.Затем, после завершения анимации отклонения, вы можете удалить окно.Вот пример кода, который, кажется, работает:

func presentChildVC() {
    modalWindow = UIWindow(frame: UIScreen.main.bounds)
    let rootController = UIViewController()
    rootController.view.backgroundColor = .clear
    rootController.addChild(childController)
    rootController.view.addSubview(childController.view)
    childController.didMove(toParent: rootController)

    modalWindow?.rootViewController = rootController
    modalWindow?.windowLevel = .alert + 1
    modalWindow?.makeKeyAndVisible()
    modalWindow?.backgroundColor = .clear
    UIView.animate(withDuration: 2, animations: {
        self.childController.view.alpha = 1
    })
}

func dismissChildVC() {
    UIView.animate(withDuration: 2, animations: {
        self.childController.view.alpha = 0
    }, completion: { _ in
        self.modalWindow?.isHidden = true
        self.modalWindow = nil
    })
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...