【问题标题】:iOS 8 Landscape orientation: Keyboard does not display correctlyiOS 8 横向:键盘无法正确显示
【发布时间】:2014-09-30 17:39:12
【问题描述】:

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

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

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

可能的修复

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

    d.window.rootViewController = tabBarController;

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

建议调试

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

【问题讨论】:

  • 这类问题通常出现在view-layer没有正确搭建或者app中orientation support不符合标准的情况下.我建议您在大喊任何 bug 之前再次仔细修改这些部分。
  • 可能,但同样的问题在测试期间出现,并在苹果开发者论坛上被指出。但是,那里没有关于该问题的进一步 cmets,因此如果是用户错误,那么这是一个非常常见的问题,并且在 iOS7 和 iOS8 之间已经发生了变化。
  • 是的,我是说键盘/方向的设置可能存在问题,但我终其一生都无法弄清楚它是什么。我没有在 iOS 7 或 6 下使用完全相同的应用程序看到问题,所以如果某些设置不正确,它现在只会浮出水面。也许其他人遇到了同样的问题?问一下也无妨。
  • 我理解你的动机,但如果你能扩展你的帖子,告诉社区如何复制这个 'bug',会更有帮助。
  • 你解决过这个问题吗?我在 iOS 中没有此问题的应用程序上看到了同样的情况。

标签: ios objective-c uikit ios8


【解决方案1】:

我有类似的问题,发现在 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"];

【讨论】:

  • 我在上面编辑了我的答案。您可能想尝试一下,看看是否有帮助。
  • 没有没有帮助。看起来它只是将允许的方向设置为与我在项目设置中所做的相同。问题是键盘忽略了它。
  • 我也有同样的问题...有什么解决办法吗??
  • 还没有,问题很大!也许投票赞成这个问题,让更多人看到它,因为它似乎已经在堆栈溢出以太中丢失了。
  • 我试过这个,它有点帮助,但这只是发生在我的 iPhone 6 Plus 上,iPhone 5 没有表现出这种行为。我发布了一个对我有用的完整解决方案...
【解决方案2】:

我在 iOS 8 设备上遇到了 Carles Estevadeordal 提到的为 iOS 7 开发的应用程序的相同问题。

经过一番调查,我发现应用程序正在调用 UIViewController 的以下方法,

"+ (void)attemptRotationToDeviceOrientation"

UI框架中给出的这个方法的描述是, “如果当前界面方向与当前设备方向不匹配,可能会发生旋转”

只需评论这个方法调用,问题就解决了。

【讨论】:

  • 这也是我的情况。我在我的 AppDelegate 中使用此方法在 iOS7 中强制执行正确的 UIAlert 方向。事实证明,这是导致 iOS8 缩放模式下键盘出现问题的原因。
【解决方案3】:

不是iOS8或iPhone 6的bug,是旧项目正确迁移到xCode6的问题。

您只需在 Info.plist 文件中添加启动屏幕界面文件基本名称键。

这个案例的详细解释可以找here

【讨论】:

    【解决方案4】:

    我的问题与问题类似,我绑定了 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"];
        }
    }
    

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-15
        • 1970-01-01
        • 2015-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多