使用Xcode 10 +,Swift 4,iOS 11.4 +
首先让我说我没有使用导航控制器- 我正在使用以下基本代码将ViewController作为孩子添加到另一个:
topController.addChildViewController(childVC)
topController.view.addSubview(childVC.view)
childVC.didMove(toParentViewController: topController)
孩子比父母小,并且有几个按钮,其中一个按钮会使其动画而不可见。
我不使用当前/关闭,因为它始终覆盖整个屏幕。
我希望它是模态的-一旦将其动画化为适当位置,屏幕上(在它后面)的其他任何东西都应该可用,直到将其动画化为看不见为止。
如何使childVC成为模态?
答案 0 :(得分:0)
您可以尝试将控制器添加到具有windowLevel = UIWindowLevelAlert + 1
的UIWindow中。然后,关闭动画完成后,您可以删除窗口。这是一个似乎有效的示例代码片段:
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
})
}
答案 1 :(得分:0)
1)子项比父项小:-
您只需要像父视图一样更新子视图框架。
topController.addChildViewController(childVC)
topController.view.addSubview(childVC.view)
**childVC.view.frame.size.height = self.view.frame.size.height**
childVC.didMove(toParentViewController: topController)
2)有几个按钮,其中一个按钮会使其动画而不可见:-
在此类按钮上设置点击事件,以从父级删除子视图
self.willMove(toParentViewController: nil)
self.view.removeFromSuperview()
self.removeFromParentViewController()