美文网首页ios实用开发技巧
iOS 弹出层之后的跳转问题

iOS 弹出层之后的跳转问题

作者: silence_xz | 来源:发表于2017-12-07 23:20 被阅读390次

    开发中遇到的问题。在一个控制器中有导航、还有底部分栏条,然后需要弹出一个全屏的弹出视图,顶部不到导航条位置。图如下,我遇到的问题是使用push跳转时,跳转的页面在弹出层下面显示,而不是在弹出层上面显示。

    图片.png 图片.png
    问题:为什么push来的页面不应该在最上面显示吗?

    然,未必;因为这个弹出视图是添加在当前Window上的,是在导航栈之后进行的添加,所以它的层级在最上面。
    你在导航栈中进行push操作,只是在导航栈中将一个控制器放在了最上面(先进后出,后添加的在最上面),比如你有一个盒子(导航栈),里面有许多书,盒子上面放了一个盖子(弹出视图),你将盒子里面的书调整位置,将最后一本抽出来(push)放在第一本上面,你说他会在最上面显示吗?显而易见,不会,因为上面还有一个盖子(弹出视图),所以只需要将盖子拿开就可以看到那本书了,他就会在最上面显示了;想让盖子在最上方显示的时候,那么就拿出来放在盒子上方就好了,知道原理,下面就看代码。

    第一步:先显示弹出视图(放一个盖子在盒子上)

    UIWindow *curWindow = [[UIApplication sharedApplication].delegate window];
    [curWindow addSubview:weakSelf.detailPopView]; // detailPopView弹出视图

    第二步:在push之前,将要push的控制器的view放在窗口的最上层,是最上层。使用sendSubviewToBack方法将弹出视图放到下层去。(也就是将弹出视图放在盒子的下面)

    [curWindow sendSubviewToBack:self.detailPopView];
    [self.navigationController pushViewController:listVC animated:YES];

    第三步:在push之后返回时,使用bringSubviewToFront方法,再将弹出视图放在窗口的最上层,就可以了。
    - (void)viewWillAppear:(BOOL)animated{
        [super viewWillAppear:animated];
     
        // 如果存在详情弹框,就将它显示在最前面
        if (self.detailPopView.superview) {
            
            UIWindow *curWindow = [[UIApplication sharedApplication].delegate window];
            [curWindow bringSubviewToFront:self.detailPopView];
        }
    }
    
    

    在这里记录一下,如果能帮到你是我的荣幸!谢谢阅读,有问题和建议请留言。

    相关文章

      网友评论

        本文标题:iOS 弹出层之后的跳转问题

        本文链接:https://www.haomeiwen.com/subject/utcsixtx.html