iOS 8方向问题:键盘出现在错误的位置

5
我有一个通用的iOS项目,它是在xCode 5中创建的,我现在想要将其迁移到xCode 6。由于我没有使用LaunchScreen,而且iPhone 6和6 Plus会将应用程序缩放到它们的分辨率,所以一切似乎都很顺利。
问题出现在设备改变方向时。
场景:
这只发生在iPhone 6和6 Plus上。
打开带有用户名和密码字段的登录屏幕。将设备旋转到横屏,并点击用户名或密码字段。键盘出现在屏幕中间并被截断了一半。旋转回纵向后,键盘完全隐藏,无论您点击哪个字段,它都不再出现在屏幕上。
为了重新获得键盘,将设备旋转回横屏,点击一个字段,然后将设备旋转到相反的横屏(不要让它进入纵向)。键盘突然变得正常,并且可以正常使用。 Problematic Keyboard

这个问题解决了吗?如果是的话,你是怎么解决的? - IamAnil
解决方案就是我在答案中提到的:不要在屏幕尺寸大于4英寸的iPhone上使用缩放模式。 - Gui13
5个回答

5
我遇到了同样的问题,这是因为你的应用在缩放模式下启动。
似乎苹果没有完全处理这种缩放模式下的横屏问题。
解决方法是在iPhone 6-6Plus上切换到非缩放模式,使用此处指定的技巧:如何在iPhone 6和6 Plus上启用应用程序的本机分辨率? 请注意,这可能会破坏你的许多屏幕,但没有其他解决方法。

0
如果您的应用程序仅支持竖屏模式,则可以停止生成方向通知;
[[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications];

我试图阻止键盘在我的仅竖屏应用程序中旋转,很抱歉这个方法对我无效 :( - Ethan Parker

0

我曾经在应用程序的可扩展模式下遇到过这个问题。虽然通过将iPhone 6和6+启动图像添加到xcassets来支持非可扩展模式可以解决此问题,但在我的情况下不允许,因为每个方向的屏幕布局是静态的。 我通过避免更改窗口的根视图控制器来解决了这个问题。相反,新的视图控制器已被添加为现有根视图控制器的子视图(因此是childViewController)(并进行平衡删除)。


0

iOS6/7上一切正常,但在iOS8上出现问题。

iOS 8上键盘的方向与状态栏不同。


0

我曾经遇到过这个问题,经过一些研究,我发现了一些导致这种错误的东西。 在我的AppDelegate中,我更改了窗口的rootViewController以显示不同的视图控制器,具体取决于授权状态。

if (!auth)
{
    self.window.rootViewController = [[AuthViewController alloc] init];
} else {
    self.window.rootViewController = [[DataViewController alloc] init];
}

我已经移除了这部分,并将控制器选择逻辑移动到了NavigationViewController中

if (!auth)
{
    self.viewControllers = @[[[AuthViewController alloc] init]];
} else {
    self.viewControllers = @[[[DataViewController alloc] init]];
}

将此 NavigationViewController 设为 Storyboard 的初始视图控制器。

希望有所帮助!


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