状态栏框架坚持纵向并遮挡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 - 切换控件后,即使在纵向模式下,旋转也会使状态栏消失