状态栏框架坚持纵向并遮挡window.view

Posted

技术标签:

【中文标题】状态栏框架坚持纵向并遮挡window.view【英文标题】:statusbar frame sticks to portrait orientation and occludes window.view 【发布时间】:2011-12-17 16:52:21 【问题描述】:

我正在开发一个应该支持所有方向的 iPad 应用程序。我没有使用笔尖。我有一个布局四个视图的 UIWindow:

其中两个占据全宽,但高度不大。 另外两个占据了大部分高度,并共享相同的 origin.x。它们不重叠。

我指定一个视图作为主窗口的子视图,其余的子视图交给window.view。

问题:旋转后,无论方向如何,状态栏的框架似乎都粘在其原始位置(纵向顶部)。虽然,状态栏确实会旋转。

我确实注意到了red-glasses 内容丰富的文章。但是,这似乎不是完全相同的问题。这在某种意义上是不同的,红眼镜方法通过将主视图设置为窗口的子视图来设法覆盖状态栏条。我采用了这种方法,但问题仍然存在。

我已经尝试在 willRotateToInterfaceOrientation:: 中重新构建和重新定位 window.view 框架 运气不好。我已经验证了新的框架/中心是我所期望的。似乎在后台进行了一些重构。

我现在不知道该怎么想... 我希望有人可以对这个问题有所了解。

【问题讨论】:

终于!我得到了一致的观点。原来问题出在didFinishLaunchingWithOptions:问题是我正在通过initWithFrame初始化我的UIWindow:[[UIScreen mainScreen] applicationFrame];当我改为使用 init 进行初始化时(在 tack 中重新设置代码),视图按预期定位。我的重构代码发生在 willRotateToInteraceOrientation:: 其中,我为每个视图计算并设置了正确的帧,然后使用 UIView animateWithDuration::::: 将转换集成到旋转动画中希望这对某人有所帮助... 【参考方案1】:

终于!我的观点一致。 原来问题出在 didFinishLaunchingWithOptions 中:

问题是我正在通过 initWithFrame:[[UIScreen mainScreen] applicationFrame]; 初始化我的 UIWindow;

当我使用 init 进行初始化时,视图按预期定位。它仅在我将重构代码留在 willRotateToInterfaceOrientation 中时才有效:(如上所述)。

在 willRotateToInterfaceOrientation: 中,我为每个视图计算并设置了正确的帧,然后使用 UIView animateWithDuration::::: 将转换集成到旋转动画中

我将倒数第二个选择器参数中的新帧设置为 animateWithDuration。

希望这对某人有所帮助...

【讨论】:

我必须道歉。这似乎是一个强大的解决方案。进行此更改后的几个小时,我丢失了所有 UI 事件。当我回到 initWithFrame 时,这个新问题就消失了。从那以后,我发现如果我将状态栏从 applicationFrame 中取出,我不再需要重新构建我的视图。对我的 iPad 应用程序使用 ios 4.3 模拟器也是如此。 我的意思是将 applicationFrame 原点添加到 applicationFrame 大小,然后将 applicationFrame 原点归零

以上是关于状态栏框架坚持纵向并遮挡window.view的主要内容,如果未能解决你的问题,请参考以下文章

安卓全屏或沉浸式状态栏下输入框(EditText)被键盘遮挡解决方法

状态栏保持横向,而 UIInterfaceOrientation 只是纵向

iOS 8 - 切换控件后,即使在纵向模式下,旋转也会使状态栏消失

2020-09-18 设置沉浸式状态栏,WebView底部输入框被键盘挡住问题

Android:虚拟按键/导航键遮挡内容的解决方案

Android状态栏着色(非沉浸式状态栏)