我使用的是模態 從根視圖控制器提出了自己的自定義容器視圖控制器(因此容器不是根視圖控制器本身)。顯示通話狀態欄時,根視圖控制器將正確處理其佈局。現在,如果我模式地呈現自定義容器與其子(可以說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及其後繼者),還是顯得有點過於重量級(觀察狀態欄也更改爲ADAP t佈局),特別是考慮到直接提交子視圖控制器時,它的行爲是正確的。