自从iOS 8以来,我的应用程序运行得非常好,但是我在测试这个应用程序时发现了一个问题。它只会在iPad上发生,并且只有在横向模式下启动应用程序时才会出现。如果以纵向模式启动,则一切正常(没有旋转问题)。如果我旋转设备(模拟器或真实设备),则视图会旋转到屏幕外,仅显示真实视图的一部分,其余部分为黑色。
是否还有其他人注意到这样的错误? 我该如何解决?
是否还有其他人注意到这样的错误? 我该如何解决?
我有类似的问题。出乎意料的是,解决方法是注释掉Appdelegate中与self.window相关的所有代码。
注释掉了初始化self.window和赋值操作,在属性检查器中通过勾选“Is Initial View Controller”复选框来设置故事板中的初始视图。
新的更好的解决方案
注释掉self.window会导致其他问题。而下面的代码是最佳选择:
- (void)applicationDidChangeStatusBarOrientation:(NSNotification *)notification
{
[UIViewController attemptRotationToDeviceOrientation];
}
UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
BOOL landscape = (orientation == UIInterfaceOrientationLandscapeLeft || orientation == UIInterfaceOrientationLandscapeRight);
NSLog(@"Currently landscape: %@, width: %.2f, height: %.2f",
(landscape ? @"Yes" : @"No"),
[[UIScreen mainScreen] bounds].size.width,
[[UIScreen mainScreen] bounds].size.height);
Currently landscape: No, width: 320.00, height: 568.00
Currently landscape: Yes, width: 568.00, height: 320.00
针对iOS 7及以下版本:
Currently landscape: No, width: 320.00, height: 568.00
Currently landscape: Yes, width: 320.00, height: 568.00
当我的应用程序中有多个窗口时,我发现这是一个问题。通过在-[UIWindow setFrame:]
上设置断点,我能够看到在旋转时,系统给我提供了错误的框架大小和位置。您可以通过手动将您的框架设置为等于[UIScreen mainScreen] bounds]
来解决此问题,如果您正在运行iOS7+并使用Xcode6进行编译,则似乎是正确的。我发现在-[UIWindow becomeKeyWindow]
中执行此操作效果很好:
- (void)becomeKeyWindow {
[super becomeKeyWindow];
self.frame = [UIScreen mainScreen].bounds;
}