当模式对话框关闭时,iPad UISplitViewController不必要地旋转

时间:2010-10-21 16:25:31

标签: ipad modal-dialog orientation landscape uisplitviewcontroller

我有一个相当简单的拆分视图应用程序,改编自iPhone代码。主要功能是在共享类中,iPhone和iPad特定的类继承和扩充代码。 iPad应用程序中使用的所有类都具有以下内容:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Overriden to allow any orientation.
    return YES;
}

主视图控制器由UIToolbar和UITableView组成。在每个阶段的第二个阶段正确响应旋转。如果我从此视图中显示模态对话框:


 navigationController = [[UINavigationController alloc] initWithRootViewController:tvc];
 navigationController.modalPresentationStyle = UIModalPresentationFormSheet;
 [self presentModalViewController:navigationController animated:NO];

一切都按预期工作,包括旋转设备,直到我以任何方式解除对话:

 [self dismissModalViewControllerAnimated:YES];

此时我的主视图旋转90度。我已经查看了nib文件中的设置,这一切似乎没问题。有什么建议?左侧UITableView显示的模式对话框不会出现此问题。

奖金问题:

我发现左侧视图显示的模态对话框确实有一个小故障。但只有一个。如果它是由纵向模式的弹出视图呈现并且设备被旋转,那么当它从视图中旋转出来时,会得到一个相当令人印象深刻的图形故障!

1 个答案:

答案 0 :(得分:0)

如上面的评论中所述,我设法将两个视图控制器合并为一个,将代码集合在一起,将工具栏+ splitview控制器整合到iPad版本中。最初有一个从UITableViewController继承的公共类,从这个公共类继承的代码的iPad和iPhone版本。 问题是在iPad上我想在顶部有一个工具栏,并且还必须支持splitview控制器。这是有问题的,因为该类是一个UITableViewController,所以我创建了一个包含工具栏和tableview控制器以及splitview代码的父类。 在重构中,我将公共类更改为UIViewController并进行更改以支持代码中的UITableView,正常情况并在几本iPhone开发书中指示。在类的iPhone版本中,我使用必要的方法手动创建UITableView。在iPad版本中,它来自xib文件。 这示意性地简化了事物,因为现在主视图在控制器内没有控制器。它也解决了这个问题。关闭模态对话框后,UI旋转90度不再出现。