iOS11适配-导航栏透明的适配

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别的控制器在返回来的时候会出现这种情况,如图:


iOS11适配-导航栏透明的适配_第1张图片


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;

}];

}

你可能感兴趣的:(iOS11适配-导航栏透明的适配)