【发布时间】:2017-10-10 13:47:11
【问题描述】:
我正在使用我自己的模态容器视图控制器
从根视图控制器呈现(因此容器不是根视图控制器本身)。当显示通话状态栏时,根视图控制器会正确处理其布局。现在,如果我以模态方式呈现自定义容器及其子容器(比如说SomeViewController 的实例),则子容器将按预期布局。如果在自定义容器已经呈现时显示通话状态栏,则孩子正确调整。
当自定义容器尚未出现时显示通话状态栏时会出现问题。如果我在有通话状态栏时显示自定义容器,则子视图的底部会被扩展状态栏的大小(即 20 点)裁剪 - 看起来框架的大小不是正确,或者设置了偏移量。如果我关闭通话状态栏,顶部将调整为新获得的空间,但底部保持裁剪。
下面展示了容器视图的相关代码:
class ContainerController: UIViewController {
var selectedViewController: UIViewController?
override func viewDidLoad() {
super.viewDidLoad()
if let selectedViewController = selectedViewController {
initialTransition(to: selectedViewController)
}
}
fileprivate func initialTransition(to viewController: UIViewController) {
guard self.isViewLoaded else {
return
}
self.addChildViewController(viewController)
viewController.view.frame = self.view.frame
self.view.addSubview(viewController.view)
viewController.didMove(toParentViewController: self)
}
// rest of the code omitted
}
容器视图在根视图控制器中使用此代码呈现:
let container = ContainerController()
trainingContainer.selectedViewController = SomeViewController()
self.present(trainingContainer, animated: true, completion: nil)
虽然有几个关于类似问题的 SO 问题(SO question、another SO question 等),但他们中的大多数提出了无效的解决方案(例如,旧的 wantsFullScreenLayout 及其继任者),或者似乎是有点太重了(观察状态栏确实会改变以适应布局),特别是考虑到直接呈现子视图控制器时,它的行为是正确的。
【问题讨论】:
标签: ios iphone swift uiviewcontroller swift4