【问题标题】:iOS View Controller Shifts After RotationiOS 视图控制器在旋转后移动
【发布时间】:2010-11-27 15:09:54
【问题描述】:
我正在开发一个 iOS 应用程序。我的应用程序委托将我的视图控制器加载到窗口上并正确显示它,除了一个警告:我的视图控制器上的视图在 Y 轴上不够远,并且状态栏剪辑了我的顶视图。我更改了视图控制器的 XIB 文件以适应这一点,所以现在我的所有视图都从 Y 轴向下 20 像素开始。在初始加载时,一切看起来都很好。当我旋转时,我的视图比应有的低 20 像素(由于我的布局更改以适应第一次加载)。我想知道的是如何更好地处理视图控制器中的定位以处理状态栏高度。
【问题讨论】:
标签:
ios
uiview
uiviewcontroller
rotation
【解决方案1】:
我已经通过不直接/以编程方式将视图呈现到窗口中来解决这个问题。我所做的是创建一个 RootViewController,它在两个方向上都正确放置和对齐,并在 RootViewController 中包含所有其他视图。
发生这种情况的原因是应用程序的窗口始终是整个屏幕(包括顶部的状态栏)。如果你试图填充 Window,你必须处理和补偿状态栏和其他 chrome。如果您在根视图中管理所有视图,则更容易。
【解决方案2】:
您的解决方案取决于您创建项目的方式。
如果您在创建项目时使用了基于视图的应用程序模板,那么您将在 MainWindow.xib 中拥有您的视图控制器。您的视图控制器应该在最初(启动时)以及旋转设备后都能正常工作,前提是您为该 NIB 中的视图控制器启用了状态栏属性(即选择灰色或黑色)。
如果您在创建项目时使用了基于窗口的应用程序模板,则必须将以下代码行添加到您的应用委托的 didFinishLaunchingWithOptions:
myViewController.view.frame = window.screen.applicationFrame;
它以某种神奇的方式让事情正确设置。