当UIAlertView存在时,没有动画的方向给出奇怪的结果

我在这里遇到一个奇怪的问题。

出于某种原因,我在视图控制器中使用[UIView setAnimationsEnabled:NO];在方向更改期间禁用动画[UIView setAnimationsEnabled:NO];
但是当警报视图存在并且我改变方向时,它会产生奇怪的结果。

附加的屏幕截图是我将方向更改为横向时。

景观模式

请注意:我使用的是标准UIAlertView ,它是默认覆盖,当警报视图出现时显示,此处不涉及自定义。

根据文档

If you disable animations, code inside subsequent animation blocks is still executed but no animations actually occur. Thus, any changes you make inside an animation block are reflected immediately instead of being animated.

所以它不应该影响默认覆盖的大小调整。 Is it a restriction in disabling animation !??

我不明白为什么我会这样。 谁能帮忙解决这个问题。

设置[UIView setAnimationsEnabled:NO];UIAlertView没有调整它的叠加视图(我认为这是一个错误)。

您可以选择在屏幕上显示警报视图时限制方向,如下所示。

在.h文件中创建BOOL变量。

 BOOL shouldRotate; 

viewDidload使用YES初始化它。

每当你在那个时候显示警报时, shouldRotate = NO;

并实现UIAlertView委托如下:

 - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ shouldRotate = YES; } 

希望能帮到你。

编辑:因为你想要没有动画和旋转与警报视图

这实际上是一个黑客,但有效,

alert是在.h文件中声明的UIAlertView对象。

 - (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation{ if (UIInterfaceOrientationPortrait == UIInterfaceOrientationIsPortrait(fromInterfaceOrientation)) { UIImageView *imgView = (UIImageView *)[alert.superview.subviews objectAtIndex:0]; imgView.frame = CGRectMake(0.0, 0.0, 480.0, 320.0); } else{ UIImageView *imgView = (UIImageView *)[alert.superview.subviews objectAtIndex:0]; imgView.frame = CGRectMake(0.0, 0.0, 320.0, 480.0); } } 

处理此错误的另一种可能性是在旋转之前以编程方式关闭警报视图并在旋转完成后显示新警报视图。

这将自动适用于任何独立于屏幕尺寸的iOS设备。

这似乎是iOS6及更低版本中的一个错误,并在iOS7iOS7

没有动画的iOS警报视图