navigation Bar色差 以及去掉下方线条

问题1:去掉navigation bar下方线条

 1. self.navigationController.navigationBar.barStyle = UIBaselineAdjustmentNone;
2.
- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
   
   UIImageView *navigationBarBottomLine = [self findBottomLineUnder:self.navigationController.navigationBar];
   
    navigationBarBottomLine.hidden =YES;
}

- (UIImageView *)findBottomLineUnder:(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 findBottomLineUnder:subview];
        if (imageView) {
            return imageView;
        }
    }
    return nil;
}

     ```
####问题2:色差产生的原因
     苹果对iOS7及以上的导航栏的高斯模糊处理,即为:导航栏后面的视图或者对导航栏的背景(或背景图)显示出来。
     如果单纯的设置背景颜色也是有高斯模糊处理的效果,对纯色高斯模糊处理过后相当于纯色的70%(猜测)透明化处理

      取消模糊处理的解决方法
      self.navigationController.navigationBar.translucent = NO;
       
      此方法有弊端,会导致布局下移




####问题3:同事解决这两种问题
    1. 单页面设置
      [self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault]; // 此处的[UIImage new]可以替换成图片
      [self.navigationController.navigationBar setShadowImage:[UIImage new]];

      如果不想影响其他页面的导航透明度,viewWillDisappear将其设置为nil即可:
      [self.navigationController.navigationBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];
      [self.navigationController.navigationBar setShadowImage:nil];

    2. 全局页面设置
    [[UINavigationBar appearance] setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault];
    [[UINavigationBar appearance] setShadowImage:[[UIImage alloc] init]];
     
     此方法有弊端,会导致布局下移

#### 注意事项

问题1下的1:&& 问题3可能会出现奇怪的白线条.


navigation Bar色差 以及去掉下方线条_第1张图片
出现白色横条.jpeg

问题1下的2能解决这个问题


navigation Bar色差 以及去掉下方线条_第2张图片
WechatIMG4.jpeg

问题2和问题3两种解决方案都会引起做坐标系的改变。

   坐标问题可以
   self.extendedLayoutIncludesOpaqueBars = YES; 来解决

参考:
http://www.jianshu.com/p/aa547432eae0
http://blog.csdn.net/u014220518/article/details/51132787

设置这个有用??
[navigationController.navigationBar setBarStyle:UIBarStyleBlack];

你可能感兴趣的:(navigation Bar色差 以及去掉下方线条)