iOS導(dǎo)航欄全透明 遇到的UIBarBackground問(wèn)題

需要在導(dǎo)航欄做高斯模糊效果,想把navigationBar設(shè)置透明,然后在navigationBar后面加個(gè)UIVisualEffectView,而不用改動(dòng)title和左右button及其他VC里面的布局, 結(jié)果發(fā)現(xiàn)navigationBar總有一層白色的View, 看了下層級(jí)發(fā)現(xiàn)是個(gè)_UIBarBackground類的View,設(shè)置backgroundColor也不頂用. 于是將其取出來(lái)隱藏了.

整理了下要將導(dǎo)航欄設(shè)置透明的兩種情況:

  1. 界面從(0,0)開(kāi)始布局, [navigationBar setTranslucent:YES];
    將navigationBar里的顏色及子view的顏色設(shè)置為透明即可,
    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)開(kāi)始布局 [navigationBar setTranslucent:NO];
    只進(jìn)行上述操作不夠, 因?yàn)橄到y(tǒng)會(huì)加一個(gè)frame為(0,0,SCREEN_WIDTH,44)的白色View作為遮擋, 而且在iOS 10版本與iOS 10之前的版本兩種情況下,這個(gè)view的類還不一樣.
    iOS 10 :_UIBarBackground
    iOS 10之前: _UINavigationBarBackground
    把這個(gè)類的view設(shè)置hidden即可實(shí)現(xiàn)從(0,44)開(kāi)始布局且導(dǎo)航欄全透明.
    代碼:

     [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;  
         }  
     }];
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容