呈现以iPad iOS 6为中心的视图控制器时出错

在iOS 5中,它正确运行:

PinRequiredViewController *pinView = [[PinRequiredViewController alloc]initWithNibName:@"PinRequiredView" bundle:nil]; UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:pinView]; // show the navigation controller modally navController.modalPresentationStyle = UIModalPresentationFormSheet; navController.modalInPopover = NO; navController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; [self presentViewController:navController animated:YES completion:nil]; navController.view.superview.frame = CGRectMake(0, 0, 250, 250); navController.view.superview.center = self.view.window.center; 

但在iOS6中不能正常工作,视图不会保留在屏幕上,包括纵向和横向。 任何解决scheme

谢谢!! 🙂

我认为这将工作,如果您删除UIModalTransitionStyleFlipHorizontal转换样式,并使用其他转换样式之一。

看起来像是UIModalTransitionStyleFlipHorizontal的一个bug。

使用完成:在你的presentViewController中:

 [self presentViewController:navController animated:YES completion:^{ navController.view.superview.bounds = CGRectMake(0, 0, 250, 250);}]; 

这将使它与UIModalTransitionStyleFlipHorizontal工作。

问题是你可以设置超级视图的框架为任何你想要的,但是原点不会被改变。 这就是为什么不保持中心的原因。

看起来苹果在iOS6中特意限制了这一点

我成功了以下几点:

 aboutViewController.modalPresentationStyle = UIModalPresentationFormSheet; aboutViewController.modalTransitionStyle = UIModalTransitionStyleCoverVertical; CGRect aboutSheetFrame = aboutViewController.view.frame; [self presentViewController:aboutViewController animated:YES completion:^{ aboutViewController.view.superview.bounds = aboutSheetFrame; }]; aboutViewController.view.superview.bounds = aboutSheetFrame; 

使用UIModalTransitionStyleFlipHorizontal转换在ios 6.1 beta 2上仍然有问题aboutSheetFrame是为了避免大小硬编码。

在我对UIModalTransitionStyleFlipHorizo​​ntal的理解中,唯一的出路是首先展示没有animation的视图,设置中心点,然后在下一行解散它,并再次用animation显示它:是的。 像下面…..

 [self presentViewController:navController animated:NO completion:nil]; CGPoint centerPoint = CGPointMake([[UIScreen mainScreen] bounds].size.width/2, [[UIScreen mainScreen] bounds].size.height/2); navController.view.superview.center = centerPoint; [navController dismissModalViewControllerAnimated:NO]; navController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; [self presentViewController:navController animated:YES completion:nil]; 

只要在viewDidAppear而不是viewDidLoad中进行。 而你已经sorting了!

对于iOS 7试试这个:

 [self.navigationController presentViewController:navigationController animated:YES completion:^{ //Make the modal bigger than normal navigationController.view.superview.bounds = CGRectMake(0, 0, 700, 650); }]; 

animation看起来很丑,所以我build议添加一个animation来改善它:

 [self.navigationController presentViewController:navigationController animated:YES completion:^{ [UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionCurveEaseIn animations:^{ //Make the modal bigger than normal navigationController.view.superview.bounds = CGRectMake(0, 0, 700, 650); } completion:^(BOOL finished) { }]; }]; 

另外请记住,您将需要在viewDidAppear中设置navigationControllers视图的框架,以使内容成为正确的大小。