这是一个iOS 8的错误(旋转方向问题)?
自iOS 8我的应用程序运行相当不错,但我testing这个应用程序时,发现一个问题。 它只发生在iPad上,只有当我以横向模式启动应用程序。 如果它在肖像启动一切都是正确的(没有轮换问题)。 如果我旋转设备(模拟器或真实设备),视图旋转出屏幕,只显示实际视图的剪切,其余的是黑色的。
任何人都注意到这样的错误? 我该如何解决?
有类似的问题。 令人惊讶的是,解决的办法是将所有与Appdelegate上的self.window相关的代码注释掉。
评论self.window的初始化及其赋值。 在“属性”检查器中,通过选中“初始视图控制器”checkbox来设置故事板中的初始视图。
更好的解决scheme
评论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);
结果是:对于iOS 8+
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
从ios8开始,纵向和横向处理屏幕高度和宽度的方式似乎有所改变。
检查这个链接是否[UIScreen mainScreen] .bounds.size在iOS8中变成取向依赖的?
更新 – 我们发现一个修复:
我find了我们的问题的答案,如下所述,似乎是完全一样的你的问题。 当我们的其他开发人员尝试点击屏幕的最右侧时,发现“主窗口中出现意外的零”。 这导致我做了一个新的search,我发现这个线程在stackoverflow实际上包含了我们的问题的答案。
(这里是帮助我回答的问题的链接: _UIApplicationHandleEventFromQueueEvent中意外的nil窗口 )
真正的答案来自frankish谁build议打开main.xib(或主故事板),并点击窗口中,并确保“启动时可见”和“启动时全屏”属性被选中(设置为true。 )
在我们的例子中,只是需要设置“启动时全屏”属性,但是设置这个固定了我们看到的旋转问题,并且修复了当在屏幕最右侧的横向上在iPad上启动时的问题不可触摸。
END UPDATE – (下面的原始非答案)
我的答案不是答案,但我遇到了完全相同的问题。 在我们的应用程序中进行旋转时,使用Xcode 6进行构build时,我会看到与此问题的屏幕截图完全相同的呈现问题。 完全相同的位置旋转与侧面和底部的黑色条。 (我们在iPhone上的应用程序不支持任何旋转,所以我们没有看到iPhone上的问题,在iPad上,我们支持横向左和右横向,当从一个旋转到另一个时,当iPad是标准旋转animation时,会回到原来的位置(显示黑条),然后回到正确的位置时,回到其他支持的方向。我不相信这是关系到任何自定义定位或animation代码。屏幕上,包括启animation面,似乎与内置的苹果屏幕旋转有关,显然不是每个项目都有这个问题在iOS中,但我没有遇到这个问题的详细资料,我昨天花了整天研究问题和通过我们的代码,我什么都没有。
一个额外的信息。 如果我使用Xcode 6构build并在iOS 7的设备上运行,那么不存在问题。 这个问题只发生在使用Xcode 6构build并在iOS 8设备上运行。
这里是我昨天发布的关于这个问题的链接。 (直到我发布我的问题之前,我才发现这个问题。)
使用Xcode 6(iOS 8 SDK)构build项目会导致iPad上的横向旋转渲染问题
当我的应用程序有多个窗口时,我发现这是一个问题。 通过在-[UIWindow setFrame:]
上设置一个断点,我可以看到旋转后,系统给了我一个错误的帧大小和位置。 你可以通过手动设置你的框架[UIScreen mainScreen] bounds]
,这似乎是正确的,如果你运行在iOS7 +和编译与Xcode6。 我发现这样做在-[UIWindow becomeKeyWindow]
对我很好:
- (void)becomeKeyWindow { [super becomeKeyWindow]; self.frame = [UIScreen mainScreen].bounds; }