iOS导航栏全透明 遇到的UIBarBackground问题

需要在导航栏做高斯模糊效果,想把navigationBar设置透明,然后在navigationBar后面加个UIVisualEffectView,而不用改动title和左右button及其他VC里面的布局, 结果发现navigationBar总有一层白色的View, 看了下层级发现是个_UIBarBackground类的View,设置backgroundColor也不顶用. 于是将其取出来隐藏了.

整理了下要将导航栏设置透明的两种情况:

  1. 界面从(0,0)开始布局, [navigationBar setTranslucent:YES];
    将navigationBar里的颜色及子view的颜色设置为透明即可,
    1. setBackgroundColor:UIColor.clearColor
    2. setBarTintColor:UIColor.clearColor
    3. setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault]
    4. setShadowImage:[UIImage new] size:CGSizeMake(SCREEN_WIDTH, 0.01f)]

  2. 界面从(0,44)开始布局 [navigationBar setTranslucent:NO];
    只进行上述操作不够, 因为系统会加一个frame为(0,0,SCREEN_WIDTH,44)的白色View作为遮挡, 而且在iOS 10版本与iOS 10之前的版本两种情况下,这个view的类还不一样.
    iOS 10 :_UIBarBackground
    iOS 10之前: _UINavigationBarBackground
    把这个类的view设置hidden即可实现从(0,44)开始布局且导航栏全透明.
    代码:

     [self.navigationBar.subviews enumerateObjectsUsingBlock:^(__kindof UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
     
         if ([obj isKindOfClass:NSClassFromString(@"_UIBarBackground")]||[obj isKindOfClass:NSClassFromString(@"_UINavigationBarBackground")]) {  
     
         obj.hidden = YES;  
         }  
     }];
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1、禁止手机睡眠[UIApplication sharedApplication].idleTimerDisabl...
    DingGa阅读 4,821评论 1 6
  • 接《iOS知识点大总结一》 三十四、主线程操作UI(对UI进行更新只能在主线程进行) 解释:所谓的在主线程更新UI...
    RunningMan_Fly阅读 5,331评论 0 0
  • 今天说说手机摄影,我很不理解的是很多人把手机摄影独立出来就以为用手机拍出好看的照片是唯一值得追求的目标。我不认为“...
    老村长的摄影日记阅读 3,414评论 0 0
  • 今夜雨急风骤, 鼓乐万马奔走。 无朗月星辉, 未减酒香醇厚。 知否,知否? 长幼聚齐左右。 2016.9.15
    蛙声一片阅读 1,643评论 1 0
  • 【一】 《史记·货殖列传》中说,孔子七十多个大弟子中,子贡最为饶益、最有钱。他拜访各个诸侯国时,拿出的礼物...
    小延阅读 5,254评论 3 4

友情链接更多精彩内容