呈现以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
是为了避免大小硬编码。
在我对UIModalTransitionStyleFlipHorizontal的理解中,唯一的出路是首先展示没有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视图的框架,以使内容成为正确的大小。