美文网首页码农的日常之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