问题描述:
- (1) 有两个界面,RootUI 和 SubUI;
- (2) RootUI需要显示Navigationbar, 而SubUI不显示Navigationbar;
- (3) 要进行的操作是:在SubUI中进行屏幕边缘拖拽操作,希望能够按照如下图所示的方式进行显示:
实现思路:
- 在 RootUI 界面的viewDidLoad方法中添加以下代码:
//业务界面的绘制区域不会向上超越navigationbar的区域,如果超越了的话,在向下滚动界面时,navigationbar的背景色同业务界面的色调有轻微的融合;
self.edgesForExtendedLayout = UIRectEdgeNone;
self.automaticallyAdjustsScrollViewInsets = NO;
/*
相当于给navigationbar赋值一个背景色,
这样做的好处是:防止UINavigationController在做两个界面之间的边缘拖拽切换时,显示一些不必要的自动补全的动画效果。
*/
self.navigationController.view.backgroundColor = COLOR_THEME;
- 在被push出来的SubUI界面中添加以下代码:
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
//强行往navigationbar的背景上设置一张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;
}