問(wèn)題描述:
- (1) 有兩個(gè)界面,RootUI 和 SubUI;
- (2) RootUI需要顯示Navigationbar, 而SubUI不顯示Navigationbar;
- (3) 要進(jìn)行的操作是:在SubUI中進(jìn)行屏幕邊緣拖拽操作,希望能夠按照如下圖所示的方式進(jìn)行顯示:

B83CEEF6-5C88-40C7-B157-EDACA4447AEA.png
實(shí)現(xiàn)思路:
- 在 RootUI 界面的viewDidLoad方法中添加以下代碼:
//業(yè)務(wù)界面的繪制區(qū)域不會(huì)向上超越navigationbar的區(qū)域,如果超越了的話,在向下滾動(dòng)界面時(shí),navigationbar的背景色同業(yè)務(wù)界面的色調(diào)有輕微的融合;
self.edgesForExtendedLayout = UIRectEdgeNone;
self.automaticallyAdjustsScrollViewInsets = NO;
/*
相當(dāng)于給navigationbar賦值一個(gè)背景色,
這樣做的好處是:防止UINavigationController在做兩個(gè)界面之間的邊緣拖拽切換時(shí),顯示一些不必要的自動(dòng)補(bǔ)全的動(dòng)畫(huà)效果。
*/
self.navigationController.view.backgroundColor = COLOR_THEME;
- 在被push出來(lái)的SubUI界面中添加以下代碼:
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
//強(qiáng)行往navigationbar的背景上設(shè)置一張alpha=0的透明顏色的圖片,這樣SubUI界面的navigationbar就被透明了
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageWithColor:[COLOR_THEME colorWithAlphaComponent:0]] forBarMetrics:UIBarMetricsDefault];
//隱藏navigationbar底部的分割線
UIImageView *navBarHairlineImageView = [self findHairlineImageViewUnder:self.navigationController.navigationBar];
navBarHairlineImageView.hidden = YES;
self.navigationController.navigationBar.translucent = YES;
}
//找到navigationbar底部的分割線
- (UIImageView *)findHairlineImageViewUnder:(UIView *)view {
if ([view isKindOfClass:UIImageView.class] && view.bounds.size.height <= 1.0) {
return (UIImageView *)view;
}
for (UIView *subview in view.subviews) {
UIImageView *imageView = [self findHairlineImageViewUnder:subview];
if (imageView) {
return imageView;
}
}
return nil;
}