iOS10 title和leftBarButtonItem不显示

之前自定义了navigationBar的背景颜色,升级到iOS10后,发现title,跟leftBarButtonItem不显示。
iOS9 之前的navigationBar的背景是_UINavigationBarBackground,到iOS变成了_UIBarBackground,可以通过xcode查看一下相应的布局。我的解决办法是,分别判断iOS10,iOS9的版本,找到对应的背景图,将起隐藏掉,可以消除分割线。然后重新创建一个视图层,颜色可以自定义,需要注意在添加视图或者更新视图时要放到主线程里,同时这个方法需要在viewWillAppear里调用。

#define isIOS9 ([[UIDevice currentDevice].systemVersion intValue]>=9?YES:NO)
#define isIOS10 ([[UIDevice currentDevice].systemVersion intValue]>=10?YES:NO)
#pragma mark - 动态修改状态栏跟顶部导航栏的颜色
-(void)changeNavigationBarBackgroundColor:(UIColor *)barBackgroundColor{
    if ([self.navigationController.navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)]){
        NSArray *subviews =self.navigationController.navigationBar.subviews;
        for (id viewObj in subviews) {
            if (isIOS10) {
                //iOS10,改变了状态栏的类为_UIBarBackground
                NSString *classStr = [NSString stringWithUTF8String:object_getClassName(viewObj)];
                if ([classStr isEqualToString:@"_UIBarBackground"]) {
                    UIImageView *imageView=(UIImageView *)viewObj;
                    imageView.hidden=YES;
                }
            }else{
                //iOS9以及iOS9之前使用的是_UINavigationBarBackground
                NSString *classStr = [NSString stringWithUTF8String:object_getClassName(viewObj)];
                if ([classStr isEqualToString:@"_UINavigationBarBackground"]) {
                    UIImageView *imageView=(UIImageView *)viewObj;
                    imageView.hidden=YES;
                }
            }
        }
        UIImageView *imageView = [self.navigationController.navigationBar viewWithTag:111];
        if (!imageView) {
            imageView=[[UIImageView alloc] initWithFrame:CGRectMake(0, -20, self.view.width, 64)];
            imageView.tag = 111;
            [imageView setBackgroundColor:barBackgroundColor];
            dispatch_async(dispatch_get_main_queue(), ^{
                [self.navigationController.navigationBar insertSubview:imageView atIndex:0];
            });
        }else{
            [imageView setBackgroundColor:barBackgroundColor];
            dispatch_async(dispatch_get_main_queue(), ^{
                [self.navigationController.navigationBar sendSubviewToBack:imageView];
            });
            
        }
        
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 之前自定义了navigationBar的背景颜色,升级到iOS10后,发现title,跟leftBarButton...
    neobuger阅读 827评论 0 0
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,312评论 4 61
  • 《高效能人士的执行4原则》 「I用自己的语言重述」 洞察力:他知道,来看球的人们有着不同的原因,有的是来看球星的,...
    糖豆妈潘丽阅读 436评论 0 0
  • 今天上午妈的堕落了,在宿舍浪费生命,下午状态还行,感觉自己会的知识还是不够,看来还需要不断的积累,不过进青岛区域赛...
    会思考的蚂蚁阅读 266评论 0 0
  • 总算学会了Axure,其实别人都说挺简单的。对公司的设计不太满意,太没追求。 本周的plan和done 本周计划要...
    小梁Ricardo阅读 166评论 0 1