原理:导航栏透明通常需要把背景颜色和分割线设置透明,大部分的方案是直接设置一个空对象,简单粗暴,缺点是无法复原,现在的解决方案是拿到导航栏背景和分割线的对象,在适当的时候进行隐藏,以下是代码
UIView *backgroundView = [[self.navigationController.navigationBar subviews] firstObject];
for (UIView *subView in backgroundView.subviews) {
if (subView.height > 63) {//实际高度为64 背景视图
_navBackImageView = subView;
}
if (subView.height < 1.0) {//实际高度为0.5 分割线
_navLineView = subView;
}
}
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
_navBackImageView.hidden = YES;
_navLineView.hidden = YES;
}
-(void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
_navBackImageView.hidden = NO;
_navLineView.hidden = NO;
}
没有根据first object 和last object获取对象是因为子视图的对象顺序会改变,这样,拿到对象以后就可以根据自己的需求进行隐藏和显示,目前测试不受系统版本的影响。
网友评论