我有一个为iOS8编译的应用程序。该应用程序设置为仅在项目设置中允许纵向方向。应用程序的视图不会按设计旋转到横向。在iOS7中,当您将设备旋转到横向时,键盘不会旋转。这是我想要的行为。
但是,在iOS8中,当您将设备旋转到横向时,键盘将错误地切换到横向。
我已在物理iPhone 6 Plus上对此进行了测试以确认问题。还通过模拟器在iPhone 5上进行了测试。知道如何解决这个问题吗?
潜在修正
我不记得我为什么要这样做,但我有一些在应用程序启动时执行的引导代码:
d.window.rootViewController = tabBarController;
其中tabBarController是应用程序的顶级选项卡栏控制器。删除此引导代码可以解决此问题。
建议的调试
虽然这在iOS的早期版本中没有出现,但看起来iOS8的行为有点不同。我建议你查看你拥有的任何自举代码。您可能必须尝试一个示例项目并添加一些位,直到找到罪魁祸首,因为在我的情况下很难跟踪。下面提供的两个答案是解决症状而非原因,所以我没有将它们标记为正确。
答案 0 :(得分:3)
我有类似的问题,并且发现在iOS8之前键盘方向与状态栏的方向相关但不幸的是在iOS8中键盘和状态栏方向是分开的。虽然它无助于解决您的问题,但希望能提供一些关于它为什么会发生的信息。
编辑: 尝试以下代码 - 它对我有用。根据允许的方向,您必须改变您明显翻转设备的方式。
// Note that UIInterfaceOrientationLandscapeLeft is equal to UIDeviceOrientationLandscapeRight (and vice versa).
// This is because rotating the device to the left requires rotating the content to the right.
[[UIDevice currentDevice] setValue:[NSNumber numberWithInteger:UIDeviceOrientationLandscapeLeft] forKey:@"orientation"];
答案 1 :(得分:1)
我遇到了iOS 8设备上Carles Estevadeordal为iOS 7开发的应用程序提到的同样问题。
经过一番调查后,我发现应用程序正在调用UIViewController的方法,
“+(void)attemptRotationToDeviceOrientation”
UI框架中给出的此方法的描述是, “如果当前界面方向与当前设备方向不匹配,则可能会发生旋转”
只需评论此方法调用,问题就解决了。
答案 2 :(得分:1)
答案 3 :(得分:0)
我的问题类似于问题,我绑Emmo213解决方案,但错误似乎随机关闭,所以这不起作用,我的情况下的问题似乎只影响iPhone 6 Plus。我决定让答案,因为它可以帮助某人,如果我找到一个我将编辑响应。
编辑:找到解决方案,当应用程序无法在缩放模式下工作时,问题肯定不会发生: How do I create launch images for iPhone 6 / 6 Plus Landscape Only Apps?
编辑:这绝对不是一个解决方案,因为问题是随机发生的。
我尝试了Emmo213解决问题的方法,它解决了我的问题,但之后我删除了这部分代码,无法再次重现问题......
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
duration:(NSTimeInterval)duration {
[super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
if([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0){
UIDeviceOrientation deviceOrientation;
switch (toInterfaceOrientation) {
case UIInterfaceOrientationLandscapeLeft:
deviceOrientation=UIDeviceOrientationLandscapeRight;
break;
case UIInterfaceOrientationLandscapeRight:
deviceOrientation=UIDeviceOrientationLandscapeLeft;
break;
case UIInterfaceOrientationPortrait:
deviceOrientation=UIDeviceOrientationPortrait;
break;
case UIInterfaceOrientationPortraitUpsideDown:
deviceOrientation=UIDeviceOrientationPortraitUpsideDown;
break;
default: deviceOrientation=UIDeviceOrientationUnknown;
break;
}
[[UIDevice currentDevice] setValue:[NSNumber numberWithInteger:deviceOrientation] forKey:@"orientation"];
}
}
我希望它可能对某些人有所帮助,但由于它看起来像一种罕见的错误行为难以重现,我不能保证这是一个有效的解决方案......
答案 4 :(得分:0)
基本上是Xcode 6中的Bug,为了避免这种情况,你可以使用Xcode 5或者使用Xcode 7构建你的项目。我尝试了xcode5和xcode7-beta,并且在两个版本上都没有键盘问题。但是当我使用xcode 6构建时,问题出现了,所以尝试使用Xcode 5或Xcode7构建您的项目(很快就可以获得Xcode7的稳定版本)。希望这会有所帮助。