美文网首页
iOS导航栏全透明 遇到的UIBarBackground问题

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

作者: MMMille | 来源:发表于2017-03-30 13:51 被阅读3564次

    需要在导航栏做高斯模糊效果,想把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;  
           }  
       }];

    相关文章

      网友评论

          本文标题:iOS导航栏全透明 遇到的UIBarBackground问题

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