业务需求是需要在app的一级页面加背景透明的弹窗
要求
1、穿透底部tabbar
2、操作弹窗可跳转,返回时弹窗仍然保留。
3、背景透明
解决方案:
1、在一级页面controller的view上添加背景透明view。 问题:无法穿透底部的tabbar。 不可行。
2、将弹窗加在window上。 这样可以满足透明和穿透底部tabbar两个条件,但是跳转时,需要先remove弹窗,返回时在add弹窗。视觉上会有一个消失在重现的过程,并且需在弹窗所在的页面add remove readd等操作。不好。
最终采用的解决方案:在一级页面present一个NavigationController。
问题:设置ViewController的view背景色之后并没有达到透明背景的效果。设置viewcontroller的UIModalPresentationStyle为UIModalPresentationOverFullScreen即可。
代码如下:
TJNavigationController *vc = [[TJNavigationController alloc] initWithRootViewController:[[EmptyViewController alloc]init]]; if ([[[UIDevice currentDevice] systemVersion] floatValue]>=8.0) { vc.view.backgroundColor = [UIColor clearColor]; vc.modalPresentationStyle = UIModalPresentationOverFullScreen; } [self.navigationController presentViewController:vc animated:YES completion:nil];
可以看到UIModalPresentationOverFullScreen是ios8添加的,so,此方法是仅用于ios8及其以上。