堆叠 presentViewController 后 statusBarFrame = 0

Posted

技术标签:

【中文标题】堆叠 presentViewController 后 statusBarFrame = 0【英文标题】:statusBarFrame = 0 after stacked presentViewController 【发布时间】:2012-11-12 18:04:31 【问题描述】:
    我的主视图控制器调用presentViewController 来显示配置屏幕。 该配置屏幕上的一个按钮调用presentViewController 以允许用户选择照片。 一旦第二个视图控制器被解除,第一个视图控制器会在 ios 6 的状态栏下重绘(在 iOS 5 上可以正常工作)。

在第一个配置控制器(模态显示的那个)的 viewWillAppear 方法中,我尝试了几件事:

检查 statusBarFrame(第一次查看时返回 20;后续查看时返回 20) 检查主屏幕的框架(第一次查看时返回0, 20, 320, 460,后续查看时返回0, 0) 手动将框架的 y 坐标设置为 20(即使自动调整大小掩码设置为无,iOS 也会将其更改回 0)

在这一点上,除了手动将所有子视图向下移动 20 像素之外,我什么都想不出来,这太笨拙了。关于可能导致此问题的任何想法?

iOS 6 中的哪些变化可能导致此问题?

【问题讨论】:

嗨,我在 iOS 7 上遇到了同样的问题。我已经尝试了你的解决方案,但它仍然存在。你知道如何为 iOS 7 修复它吗?谢谢 【参考方案1】:

我不知道为什么,但是通过删除 iOS 6 旋转方法解决了这个问题,因为该应用仅支持纵向(shouldAutorotate 和supportedInterfaceOrientations),所以这些方法未被使用。

【讨论】:

感谢您的更新。我也遇到了这个错误,我听从了你的建议(实际上,只需删除 supportedInterfaceOrientations 方法对我有用)。 嗯,这行得通。感谢分享。我认为它与自动布局有关。它甚至发生在 iOS8 中(我上次测试为 8.1)。 事实证明,它还修复了另一个错误。相同的场景:呈现一个模态然后关闭。键盘只是在某处偏移。从那时起,每次您选择另一个文本字段时,它都会自行偏移。但是这个仅限于 iOS7,只有稀疏的 AutoLayout 实现。 如果您真的需要覆盖 -supportedInterfaceOrientation 方法,这里有 另一个 修复方法:***.com/a/14530123/425694。在我的情况下,我必须坚持前面rootViewController 的纵向方向。这会覆盖我设置为支持所有设备方向的 plist 配置。适用于 iOS7 和 8。不过,在呈现模式时,iOS7 需要做更多的工作。

以上是关于堆叠 presentViewController 后 statusBarFrame = 0的主要内容,如果未能解决你的问题,请参考以下文章

presentViewController pushViewController和presentModalViewController

PresentViewController切换界面

找不到 presentViewController

PresentViewController 故障排除

presentViewController 过渡动画

presentViewController 的动画属性