在 iOS 7 中显示 UIAlertView 时出现旋转问题

Posted

技术标签:

【中文标题】在 iOS 7 中显示 UIAlertView 时出现旋转问题【英文标题】:rotation problems when a UIAlertView is showing in iOS 7 【发布时间】:2013-11-08 02:13:53 【问题描述】:

ios7 中,很少但偶尔,当我在显示 UIAlertView 时旋转我的应用程序时,只有 alertView 和状态栏旋转,而不是我的应用程序。有其他人经历过这种情况和/或找到解决方法吗?

【问题讨论】:

以下方法都不适合我,虽然我还没有在 7.1 中重新测试 【参考方案1】:

我已经通过向应用委托添加下一个方法解决了这个问题:

- (void)application:(UIApplication *)application willChangeStatusBarOrientation:(UIInterfaceOrientation)newStatusBarOrientation duration:(NSTimeInterval)duration  
NSArray *windows = [application windows];
for (UIWindow *nextWindow in windows) 
    [[nextWindow.rootViewController class] attemptRotationToDeviceOrientation];
     

【讨论】:

这解决了我的问题,看起来绝对合理!但我想知道这是否是 iOS 7+ 的错误,因为它们在 iOS 7 中更改了 UIALertView 的层次结构。 @user3404693 因为你不能在 iOS8 中使用 UIAlertView。请改用 UIAlertController。无法保证(根据我的经验) UIAlertView 可以在 iOS8 上正常工作。【参考方案2】:

我遇到了相反的问题。我的应用程序会旋转,但警报视图不会旋转。我发现这是因为我在 UIActionSheet 被解雇后立即显示警报视图(所以当它发生解雇动画时)。这似乎触发了一个错误,该错误将使警报视图不随应用程序旋转(以及稍后的其他一些小视觉问题)。我通过在操作表开始关闭后半秒显示警报视图来解决这个问题,如下所示:

[alertView performSelector:@selector(show) withObject:nil afterDelay:0.5];

【讨论】:

我没有显示UIActionSheet,而是在显示UIAlertView 时关闭了视图控制器,这解决了问题。 这就是它在我的应用中发生的方式! 修复了我的错误。谢谢。对我来说,这仅在 iOS 7 上不需要 iOS 8 或 iOS 6。【参考方案3】:

我认为iOS7问题的根源在于Apple改变了UIAlertView的外观机制。 从现在开始,在启动两个私有视图控制器之后,任何显示的 alertView 都会出现

_UIModalItemAppViewController
_UIModalItemsPresentingViewController

换句话说,现在 UIAlertView 不是一个纯粹的视图 - 它是一些复杂的视图控制器集合的一部分,具有完整的视图控制器生命周期。

【讨论】:

以上是关于在 iOS 7 中显示 UIAlertView 时出现旋转问题的主要内容,如果未能解决你的问题,请参考以下文章

UIActivityIndi​​catorView 未显示在 UIAlertView - iOS7 [重复]

在带有 Xamarin.iOS 的 iOS 7 上的 ViewDidAppear 方法中显示阻止的 UIAlertView 不起作用

如何在 iOS 7 中以编程方式正确关闭 UIAlertView?

如何在 iOS 8 上显示没有按钮的 UIAlertView?

当 SDK 目标为 iOS7 时,UIAlertView 太记账,无法在 iOS8 中替换

iOS:减少应用程序进入前台时 UIAlertView 显示的延迟