iPad模态视图旋转parentViewController视图

时间:2010-09-20 02:13:30

标签: ipad modal-dialog landscape autorotate

当应用程序处于横向模式(我计划强制)时,显示模态视图会导致父视图旋转到纵向模式。如果我将shouldAutoRotateToInterfaceOrientation的返回值设置为NO,则父项不会旋转,但是模态然后从侧面滑入并侧向显示。下面是显示模态的代码。

- (IBAction)loadExistingGame:(id)sender {

SavedGamesTableViewController *savedGames = [[SavedGamesTableViewController alloc] initWithStyle:UITableViewStyleGrouped];
savedGames.modalPresentationStyle = UIModalPresentationFormSheet;
[self presentModalViewController:savedGames animated:YES];

[savedGames release];

}

根据请求,这里是SavedGamesTableViewController的shouldAutoRotate方法的内容

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Override to allow orientations other than the default portrait orientation.
return YES;

}

5 个答案:

答案 0 :(得分:2)

好的,我想出了解决它需要做些什么。包含可能方向列表的plist文件需要限制为单个横向视图。只有当方向与plist文件中的唯一方向匹配时,模态表视图的父级才需要使shouldAutoRotateToInterfaceOrientation方法返回YES。

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

}

模态viewcontroller应该为同一方法返回NO。

答案 1 :(得分:0)

基于

  

当应用程序处于横向状态时   模式(我计划强行),   显示模态视图会导致   父视图旋转到纵向   模式。

  

根据要求,这里的内容是   的shouldAutoRotate方法   SavedGamesTableViewController

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Override to allow orientations other than the default portrait orientation.
return YES;
}

所以您所说的是父视图控制器尚未设置为仅使用横向方向强制显示,并且当您显示设置为允许所有方向的模式视图时,您会想知道父视图旋转的原因将设备旋转为纵向时画像?我不明白你的问题...你不是说父视图控制器当前设置为允许旋转到肖像吗?这种行为究竟应该发生什么?

答案 2 :(得分:0)

在提出模态邮件视图时遇到了类似的问题。强制旋转对我来说不起作用,但是在应用程序的主视图控制器而不是子视图控制器上调用presentModalViewController解决了这个问题。

答案 3 :(得分:0)

我看到了同样的行为;在我的情况下问题是我已经实现了shouldAutorotateToInterfaceOrientation无条件地为父视图控制器返回YES但不是为呈现的模态视图控制器。所以我怀疑Shaggy Frog的评论是关键:你是否想要强制横向模式,你需要确保两个视图控制器'shouldAutorotateToInterfaceOrientation实现同意或者随之而来的怪异。

答案 4 :(得分:0)

UIViewController *vc = /* create view controller */;
UINavigationController *nc = nil;
if (IOS_VERSION_LESS_THAN_6_0) {
    nc = [[MyCustomNavigationControllerSupportingAllOrientations alloc] initWithRootViewController:vc];
} else {
    nc = [[UINavigationController alloc] initWithRootViewController:vc];
}
[self.navigationController presentModalViewController:nc animated:YES];

在iOS6上我使用UINavigationController。

在iOS6之前,我将UINavigationController子类化,如下所示:

@interface MyCustomNavigationControllerSupportingAllOrientations : UINavigationController
@end

@implementation MyCustomNavigationControllerSupportingAllOrientations
-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return YES;
}
@end