因为iOS 8我的应用程序运行良好,但我在测试此应用程序时发现了一个问题。 它只发生在iPad上,只有我在横向模式下启动应用程序。如果它在Portrait中启动,一切都是正确的(没有旋转问题)。如果我旋转设备(模拟器或真实设备),视图会旋转出屏幕,只显示真实视图的剪切,其余部分为黑色。
其他人确实注意到了这样的错误吗?我该如何解决?
答案 0 :(得分:4)
有类似的问题。令人惊讶的是,修复程序是在Appdelegate上注释掉与self.window相关的所有代码。
评论self.window及其作业的初始化。通过选中"是初始视图控制器"在属性检查器中的故事板中设置初始视图复选框。
新的更好的解决方案
评论self.window引起了其他问题。相反,以下代码是最好的:
- (void)applicationDidChangeStatusBarOrientation:(NSNotification *)notification
{
[UIViewController attemptRotationToDeviceOrientation];
}
答案 1 :(得分:2)
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开始,纵向和横向处理屏幕的高度和宽度的方式似乎发生了变化。
检查此链接 Is [UIScreen mainScreen].bounds.size becoming orientation-dependent in iOS8?
答案 2 :(得分:2)
更新 - 我们找到了修复:
我找到了问题的答案,如下所述,与您的问题完全相同。当我试图点击屏幕的最右侧时,我们的其他开发人员注意到“主窗口中出现意外的零”。这导致我做了一个新的搜索,我发现stackoverflow上的这个线程实际上包含了我们问题的答案。
(这是帮助我答案的问题的链接:unexpected nil window in _UIApplicationHandleEventFromQueueEvent)
实际答案来自frankish,他建议打开main.xib(或主要故事板)并单击其中的Window并确保选中“Launch at launch”和“Full screen at Launch”属性(设置)为了真实。)
在我们的例子中,只需要设置“启动时全屏”属性,但设置此项修复了我们看到的旋转问题并修复了一个问题,即在最右侧的风景中在iPad上启动屏幕不可触摸。
END UPDATE - (原始非答案)
我的回答不是答案,但我遇到了同样的问题。在我们的应用程序中旋转时,使用Xcode 6进行构建时,我会看到与此问题的屏幕截图完全相同的渲染问题。完全相同的位置旋转,侧面和底部带有黑条。 (我们在iPhone上的应用程序不支持任何轮换,因此我们在iPhone上看不到问题。在iPad上我们支持横向左侧和横向右侧。当从一个旋转到另一个时,当iPad执行它的标准旋转动画时,它当走一条路时会旋转到位(显示黑条),然后在回到另一个支持的方向时旋转回到正确的位置。我不相信它与任何自定义定位或动画代码有关。它发生在每一个屏幕,包括启动画面。它似乎与内置的Apple屏幕旋转有关。显然不是每个项目在iOS都有这个问题,但我没有遇到导致这个问题的细节。我昨天花了一整天研究问题,并通过我们的代码,我什么都没有。
一条额外信息。如果我使用Xcode 6构建并在iOS 7设备上运行,则没有问题。这个问题只发生在我使用Xcode 6构建并在iOS 8设备上运行时。
以下是我昨天发布的有关此问题的问题的链接。 (在我发布问题之前,我没有遇到过这个问题。)
Building project with Xcode 6 (iOS 8 SDK) causes landscape rotation rendering issue on iPad
答案 3 :(得分:0)
当我的应用程序中有多个窗口时,我发现这是一个问题。通过在-[UIWindow setFrame:]
上设置断点,我能够看到在旋转时,系统给了我一个错误的帧大小和位置。您可以通过手动将帧设置为等于[UIScreen mainScreen] bounds]
来解决此问题,如果您在iOS7 +上运行并使用Xcode6进行编译,这似乎是正确的。我发现在-[UIWindow becomeKeyWindow]
中这样做对我来说效果很好:
- (void)becomeKeyWindow {
[super becomeKeyWindow];
self.frame = [UIScreen mainScreen].bounds;
}