iOS11之后,navigationBar的子视图层级更改了,但是还是可以使用如下代码控制导航栏的透明
1. 获取navigationBar控制导航栏颜色的视图
self.barImageView = self.navigationController.navigationBar.subviews.firstObject;
2. 之前是这样写的
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
[UIView animateWithDuration:0.25 animations:^{
self.barImageView.alpha = 0.0f;
}];
}
-(void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
[UIView animateWithDuration:0.25 animations:^{
self.barImageView.alpha = 1.0f;
}];
}
在控制器的生命周期中,都在will方法中控制器导航栏的透明度,这在ios11之前是ok的,但是在ios11的系统中,这个控制器push别的控制器在返回来的时候会出现这种情况,如图:
push的控制器的导航栏的颜色是白色,返回来的时候,在viewWillAppear方法中未能够将导航栏改为透明。
解决办法: 将控制透明度的代码放到viewDidAppear中就可以了。
-(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
[UIView animateWithDuration:0.25 animations:^{
self.barImageView.alpha = 0.0f;
}];
}
-(void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
[UIView animateWithDuration:0.25 animations:^{
self.barImageView.alpha = 1.0f;
}];
}