iOS 8横向:键盘无法正确显示

时间:2014-09-30 17:39:13

标签: ios objective-c uikit ios8

我有一个为iOS8编译的应用程序。该应用程序设置为仅在项目设置中允许纵向方向。应用程序的视图不会按设计旋转到横向。在iOS7中,当您将设备旋转到横向时,键盘不会旋转。这是我想要的行为。

但是,在iOS8中,当您将设备旋转到横向时,键盘将错误地切换到横向。

我已在物理iPhone 6 Plus上对此进行了测试以确认问题。还通过模拟器在iPhone 5上进行了测试。知道如何解决这个问题吗?

潜在修正

我不记得我为什么要这样做,但我有一些在应用程序启动时执行的引导代码:

    d.window.rootViewController = tabBarController;

其中tabBarController是应用程序的顶级选项卡栏控制器。删除此引导代码可以解决此问题。

enter image description here

建议的调试

虽然这在iOS的早期版本中没有出现,但看起来iOS8的行为有点不同。我建议你查看你拥有的任何自举代码。您可能必须尝试一个示例项目并添加一些位,直到找到罪魁祸首,因为在我的情况下很难跟踪。下面提供的两个答案是解决症状而非原因,所以我没有将它们标记为正确。

5 个答案:

答案 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)

这不是iOS8或iPhone 6的错误。这是将旧项目正确迁移到xCode6的问题。

您只需将启动屏幕界面文件基本名称密钥添加到Info.plist文件中。

此案例的详细说明,您可以找到here

答案 3 :(得分:0)

我的问题类似于问题,我绑Emmo213解决方案,但错误似乎随机关闭,所以这不起作用,我的情况下的问题似乎只影响iPhone 6 Plus。我决定让答案,因为它可以帮助某人,如果我找到一个我将编辑响应。

iPhone 6 Plus Keyboard disappearing and wrongly placed randomly


编辑:找到解决方案,当应用程序无法在缩放模式下工作时,问题肯定不会发生: 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的稳定版本)。希望这会有所帮助。