3

我的应用程序的启动页面仅使用以下代码设置为纵向:

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait ;
}

当应用程序启动时,会UIAlertView出现一个用户名和密码输入。显示它的方法是从 调用的viewWillAppear

这适用于iOS6 ,但从iOS7 开始,如果我将设备切换到横向,主视图仍然是纵向的,但警报视图和键盘会旋转到横向。另一个奇怪的怪癖是,当我切换回纵向时,只有键盘切换回来(以截断形式),使警报在横向模式下冻结:

在此处输入图像描述

谁能告诉我如何防止这种情况?

-编辑-

自动旋转代码在一个单独的类别中调用:

@implementation UINavigationController (Orientation)

-(NSUInteger)supportedInterfaceOrientations
{
    return [self.topViewController supportedInterfaceOrientations];
}

-(BOOL)shouldAutorotate
{
    if (UIInterfaceOrientationIsLandscape([[UIDevice currentDevice] orientation])) return NO;
    else return YES;
}

@结尾

-编辑2-

我也尝试过创建一个类别,UIAlertView但它从未被调用:

@implementation UIAlertView (Orientation)

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}

-(BOOL)shouldAutorotate
{
    return NO;
}

-编辑 3-

我不确定这有多相关,但这里是显示警报的代码:

- (void)alertWithMessage:(NSString *)theMessage
{
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Login"
                                                    message:theMessage
                                                   delegate:self
                                          cancelButtonTitle:@"Login"
                                          otherButtonTitles: nil];

    [alert setAlertViewStyle:UIAlertViewStyleLoginAndPasswordInput];
    UITextField *nameField = [alert textFieldAtIndex:0];
    [alert show];
}
4

3 回答 3

3

尝试在viewDidAppear:. 我以前见过这样的奇怪行为,因为视图布局还没有完全定义。在viewDidAppear:中,一切都已设置和布局,因此此时不应该有任何问题。

于 2013-11-07T17:13:31.143 回答
1

您是否尝试过实施shouldAutorotate?你可以在你的情况下做:

- (BOOL)shouldAutorotate
{
    if (UIInterfaceOrientationIsLandscape([[UIDevice currentDevice] orientation])) return NO;
    else return YES;
}
于 2013-11-07T10:17:41.953 回答
1

我遇到了这种情况,但是 AppDelegate 正在显示警报。在阅读了 Scott Berrevoet 关于视图布局尚未完全定义的答案后,我在显示警报对话框之前添加了一个非常轻微的延迟,以便为所有内容提供一些时间来设置并解决问题。

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^(void) {
    [self.updateAlert show];
});
于 2014-04-23T13:06:24.967 回答