如何present一个透明的NavigationController

时间:2021-09-16 20:05:05

业务需求是需要在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及其以上。