美文网首页码农的日常之iOS开发iOSiOS学习
iOS小知识点08(去掉导航栏下边的横条)

iOS小知识点08(去掉导航栏下边的横条)

作者: 丨n水瓶座菜虫灬 | 来源:发表于2016-07-11 18:43 被阅读877次

在项目中,有一个界面的导航栏颜色需要与视图的背景色相同,在调试的时候发现,设置的导航栏颜色与视图背景色一样时,实际看到的缺不一样,而且导航栏与视图之间有一条很细的线。于是在网上找了一些方法来解决这个问题。如下:

#import "ViewController.h"

@interface ViewController ()
{
    UIImageView *navBarBottonLineImageView;
}

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    navBarBottonLineImageView = [self findBarBottomLineImageView:self.navigationController.navigationBar];
    // test

    self.navigationController.navigationBar.barTintColor = [UIColor redColor];
    self.view.backgroundColor = [UIColor redColor];
    self.navigationController.navigationBar.translucent = NO; //设置半透明度为NO后,导航栏的颜色才与视图背景色一样
}

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    navBarBottonLineImageView.hidden = YES;//隐藏
}

- (void)viewDidDisappear:(BOOL)animated {
    [super viewDidDisappear:animated];
    navBarBottonLineImageView.hidden = NO;
}

// 找到横线视图
- (UIImageView *)findBarBottomLineImageView:(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 findBarBottomLineImageView:subView];// 递归
        if (imageView) {
            return  imageView;
        }
    }
    return nil;
}

@end

1.没有设置self.navigationController.navigationBar.translucent = NO;navBarBottonLineImageView.hidden = YES时,原始效果:

原始图

2.设置了self.navigationController.navigationBar.translucent = NO时效果图:

颜色一致

3.设置navBarBottonLineImageView.hidden = YES后的效果图:

隐藏导航栏下边的横条

相关文章

网友评论

  • Doliant_H:正需要谢谢分享
    丨n水瓶座菜虫灬:@左岸听雨 :wink:
  • 韦鲁斯:- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [self.navigationController.navigationBar setBackgroundImage:[UIImage imageWithColor:RGB(255, 255, 255)] forBarMetrics:UIBarMetricsDefault];
    [self.navigationController.navigationBar setShadowImage:[UIImage new]];
    }
    这样是否更好
    丨n水瓶座菜虫灬:@韦鲁斯 用导航控制器push出另一个控制器的时候,在另一个控制器的导航栏颜色仍然与视图背景色相同,在那个控制器中设置[self.navigationController.navigationBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault],可以恢复原有效果,不知道这样做对不对呢?
    丨n水瓶座菜虫灬:@韦鲁斯 嗯嗯,我试了一下,需要写一个 颜色转换成UIImage的分类, 而且要把alpha设置为0,效果一样,确实挺好的,谢谢啦,又涨知识了。 :grin:
    9316236ca1a6:@韦鲁斯 正解

本文标题:iOS小知识点08(去掉导航栏下边的横条)

本文链接:https://www.haomeiwen.com/subject/xqsjjttx.html