gpt4 book ai didi

ios - 自定义容器未正确调整布局以适应通话状态栏

转载 作者:行者123 更新时间:2023-11-28 08:01:07 25 4
gpt4 key购买 nike

我正在使用自己的模态自定义容器 View Controller 从 Root View Controller 呈现(因此容器不是 Root View Controller 本身)。显示通话状态栏时, Root View Controller 会正确处理其布局。现在,如果我模态地展示自定义容器及其子容器(比如说 SomeViewController 的实例),子容器将按预期布局。如果在自定义容器已显示时显示通话中状态栏,则 child 会正确调整。

当显示通话中状态栏而自定义容器尚未显示时,就会出现问题。如果我在有通话中状态栏的情况下显示自定义容器,则 subview 的底部会被扩展状态栏的大小(即 20 点)裁剪 - 似乎框架的大小不是正确,或者设置了偏移量。如果我关闭通话状态栏,顶部会调整到新获得的空间,但底部会保持裁剪状态。

容器 View 的相关代码如下:

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
}

容器 View 在 Root View Controller 中使用此代码呈现:

let container = ContainerController()
trainingContainer.selectedViewController = SomeViewController()
self.present(trainingContainer, animated: true, completion: nil)

虽然有几个关于类似问题(SO questionanother SO question 等)的 SO 问题,但其中大多数建议要么解决方案不起作用(例如,旧的 wantsFullScreenLayout 及其后继者),要么似乎是有点太重量级了(观察状态栏确实改变以适应布局),特别是考虑到当直接呈现 subview Controller 时,它的行为是正确的。

最佳答案

在尝试之后,我能够确定设置的框架有问题 - 当 initialTransition(to:) 时,容器 View Controller 的框架似乎被偏移但没有调整大小被调用(在容器的 viewDidLoad 中),从而导致 child 获得一个与屏幕底部重叠偏移量 - 20 点的帧。

我的第一个方法是在容器的 viewDidAppear 中再次添加设置框架,这最终解决了问题,但导致了一个故障 - 有一段时间底部似乎被裁剪了,然后 viewDidAppear 被调用并且布局被正确调整。这个故障看起来很糟糕。

我终于通过覆盖容器的 viewDidLayoutSubviews 并在那里设置子框架来实现我想要的(因此当容器收到通知将其框架调整到状态栏时,关于新框架的信息会传给 child )。

override func viewDidLayoutSubviews() {
self.selectedViewController?.view.frame = self.view.frame
super.viewDidLayoutSubviews()
}

关于ios - 自定义容器未正确调整布局以适应通话状态栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46668440/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com