iOS 8 横屏模式下:键盘显示不正确

14

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

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

我已经在iPhone 6 Plus上进行了测试以确认此问题。还通过模拟器在iPhone 5上进行了测试。有什么办法可以解决这个问题吗?

潜在解决方法

我不记得准确的原因,但当应用程序启动时,我有一些引导代码执行:

    d.window.rootViewController = tabBarController;

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

enter image description here

建议调试

虽然这在以前的iOS版本中没有出现过,但看起来iOS8的行为有些不同。我建议检查您的任何引导代码。您可能需要尝试一些示例项目并添加一些细节,直到找到罪魁祸首,因为在我的情况中很难跟踪。下面提供的两个答案修复了症状而不是原因,所以我没有将它们标记为正确。


2
这种问题通常出现在视图层没有正确构建或应用程序中的方向支持不符合标准时。我建议您在喊出任何“错误”之前再次仔细检查这些部分。 - holex
1
可能是同样的问题在测试版中出现过,并在苹果开发者论坛上指出。然而,在那里对这个问题没有进一步的评论,所以如果这是用户错误,那么这是一个相当普遍的问题,并且在iOS7和iOS8之间有所改变。 - Imran
是的,我想说键盘/方向的设置可能存在问题,但我无论如何都想不出是什么问题。在iOS 7或6下,我没有看到过完全相同应用程序的问题,因此如果某些设置不正确,它现在才会浮出水面。也许其他人也遇到了同样的问题?问一下也无妨。 - Imran
好的,如果我知道了,我可能可以修复它!到目前为止,我有一个普通的测试项目,它没有复制这个问题。我正在尝试使用相同的项目设置,但目前还没有成功复制它。 - Imran
1
你有解决这个问题吗?我在一个之前在 iOS < 8 上没有问题的应用程序中看到了相同的情况。 - Rich Everhart
显示剩余6条评论
5个回答

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"];

我修改了我的回答。你可能想试一试看它是否有帮助。 - Emmo213
1
我也在遇到同样的问题…有解决方案了吗?? - Steffan
还没有解决,这是一个相当大的问题!也许可以投票支持该问题,这样更多的人就能看到它,因为它似乎已经在堆栈溢出中丢失了。 - Imran
我进一步尝试了这个解决方案,但它明显不起作用。 - Carles Estevadeordal
这是试图强制设备方向 - 不会起作用并且“邪恶”(tm)。 - Daij-Djan
显示剩余3条评论

1
这不是iOS8或iPhone 6的错误,而是旧项目正确迁移到xCode6的问题。您只需要将Launch screen interface file base name键添加到Info.plist文件中即可。
您可以在这里找到此案例的详细解释。

1
我曾经遇到与Carles Estevadeordal提到的问题相同的问题,这是在为iOS 7开发的应用程序上使用iOS 8设备时出现的。
经过一番调查,我发现应用程序调用了UIViewController的以下方法:
+ (void)attemptRotationToDeviceOrientation
UI框架中对此方法的描述是:“如果当前界面方向与当前设备方向不匹配,则可能会发生旋转”。
简单地注释掉此方法调用,问题得到了解决。

您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Stanislav Dvoychenko

0

我的问题类似于这个问题,我尝试了Emmo213的解决方案,但错误似乎会随机出现和消失,所以这并不起作用。在我的情况下,问题似乎只影响iPhone 6 Plus。我决定保留回复,因为它可能会帮助某人,如果我找到一个解决方案,我会编辑回复。

iPhone 6 Plus Keyboard disappearing and wrongly placed randomly


编辑:找到了解决方案,当应用程序未在缩放模式下工作时,问题绝对不会发生: 如何为iPhone 6 / 6 Plus横向应用程序创建启动图像?


编辑:这绝对不是一个解决方案,因为问题会随机出现和消失。

我尝试了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"];
    }
}

我希望这可以帮助到某些人,但由于它看起来像是一种罕见的错误行为,难以复现,我不能保证这是一个有效的解决方案...


0

这基本上是Xcode 6的Bug,为了避免这种情况,您可以使用Xcode 5或使用Xcode 7构建项目。我在xcode5和xcode7-beta上尝试过,在这两个版本中都没有键盘问题。但是当我使用xcode 6构建时,问题就会出现,因此请尝试使用Xcode 5或Xcode7(很快稳定版本的Xcode7将可用)。希望这能帮到您。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接