UIModalPresentationStyle 大概有以下几种模式
// 充满全屏,如果弹出VC的wantsFullScreenLayout设置为YES的,则会填充到状态栏下边,否则不会填充到状态栏之下
UIModalPresentationFullScreen
// 高度和当前屏幕高度相同,宽度和竖屏模式下屏幕宽度相同,剩余未覆盖区域将会变暗并阻止用户点击,这种弹出模式下,竖屏时跟UIModalPresentationFullScreen的效果一样,横屏时候两边则会留下变暗的区域
UIModalPresentationPageSheet
// 高度和宽度均会小于屏幕尺寸,presented VC居中显示,四周留下变暗区域
UIModalPresentationFormSheet
// 弹出方式和presenting VC的父VC的方式相同
UIModalPresentationCurrentContext
// 自定义视图展示风格,由一个自定义演示控制器和一个或多个自定义动画对象组成。
// 符合UIViewControllerTransitioningDelegate协议,使用视图控制器的transitioningDelegate设定您的自定义转换
UIModalPresentationCustom
// 如果视图没有被填满,底层视图可以透过
UIModalPresentationOverFullScreen
// 视图全部被透过
UIModalPresentationOverCurrentContext
// iPad中常用的设置弹出模式
UIModalPresentationPopover
注意:UIModalPresentationPageSheet 和 UIModalPresentationFormSheet 在 iPhone上始终以UIModalPresentationFullScreen模式显示
在iPad上如果需要自定义弹窗大小时
UIViewController *targetVC = [[UIViewController alloc] init];
targetVC.modalPresentationStyle = UIModalPresentationFormSheet;
[self presentViewController:targetVC animated:YES completion:nil];
targetVC.view.superview.frame = CGRectMake(0, 0, 100, 100);
在 iOS 8 以后也可以用以下代码来设置尺寸
[targetVC setPreferredContentSize:CGSizeMake(100, 100)];
注意:设置尺寸的代码一定要在 presentViewController 执行之后再调用,否则无效。
弹出一个带透明度的遮罩窗口
iOS 7:
modalVC.modalPresentationStyle = UIModalPresentationCurrentContext;
iOS 8:
modalVC.modalPresentationStyle = UIModalPresentationOverCurrentContext;
modalVC.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
and then in both:
[presentVC presentViewController:modalVC animated:YES completion:nil];