開發(fā)中遇到的問題撬腾。在一個(gè)控制器中有導(dǎo)航、還有底部分欄條恢恼,然后需要彈出一個(gè)全屏的彈出視圖民傻,頂部不到導(dǎo)航條位置。圖如下场斑,我遇到的問題是使用push跳轉(zhuǎn)時(shí)饰潜,跳轉(zhuǎn)的頁面在彈出層下面顯示,而不是在彈出層上面顯示和簸。
問題:為什么push來的頁面不應(yīng)該在最上面顯示嗎彭雾?
然,未必锁保;因?yàn)檫@個(gè)彈出視圖是添加在當(dāng)前Window上的薯酝,是在導(dǎo)航棧之后進(jìn)行的添加,所以它的層級在最上面爽柒。
你在導(dǎo)航棧中進(jìn)行push操作吴菠,只是在導(dǎo)航棧中將一個(gè)控制器放在了最上面(先進(jìn)后出,后添加的在最上面)浩村,比如你有一個(gè)盒子(導(dǎo)航棧),里面有許多書做葵,盒子上面放了一個(gè)蓋子(彈出視圖),你將盒子里面的書調(diào)整位置心墅,將最后一本抽出來(push)放在第一本上面酿矢,你說他會在最上面顯示嗎?顯而易見怎燥,不會瘫筐,因?yàn)樯厦孢€有一個(gè)蓋子(彈出視圖),所以只需要將蓋子拿開就可以看到那本書了铐姚,他就會在最上面顯示了策肝;想讓蓋子在最上方顯示的時(shí)候,那么就拿出來放在盒子上方就好了,知道原理之众,下面就看代碼拙毫。
第一步:先顯示彈出視圖(放一個(gè)蓋子在盒子上)
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之后返回時(shí)帘睦,使用bringSubviewToFront方法,再將彈出視圖放在窗口的最上層坦康,就可以了竣付。
- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
// 如果存在詳情彈框,就將它顯示在最前面
if (self.detailPopView.superview) {
UIWindow *curWindow = [[UIApplication sharedApplication].delegate window];
[curWindow bringSubviewToFront:self.detailPopView];
}
}
在這里記錄一下滞欠,如果能幫到你是我的榮幸古胆!謝謝閱讀,有問題和建議請留言筛璧。