將UINavigationBar設置爲全透明的兩種方法

實現UINavigationBar的全透明是實現動態改變導航欄顏色的前提,我找到了兩種方法來實現這種效果

第一種

self.navigationController?.navigationBarHidden = true

第二種方法我找了好久,今天才知道

我嘗試過設置

    self.navigationController?.navigationBar.barTintColor = nil
    self.navigationController?.navigationBar.backgroundColor = nil

然而仍然有一層半透明效果去除不掉


我打開ViewDebugging看了ViewHierarchy發現原因是因爲如果不管這個_UINavigationBarBackground,也就是我們設置NavigationBar.backgroundImage的那個UIImageView,上面就會默認有一層_UIBackdropView和_UIBackdropEffectView,這兩個View是產生半透明效果的原因,我們用這行代碼

    self.navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default)

就可以去掉那層半透明效果

另外,實現動態改變UINavigationBar的顏色我目前知道的有兩個思路

一個是不用系統的UINavigationBar,按我第一種方法設置hidden爲true,自己畫一個出來

另一種方法就是按我上面說的第二種方法設置成全透明效果之後,仿照Apple的實現方法,從NavigationBar的ViewHierarchy中insert一個View,通過控制它的顏色來控制NavigationBar的顏色

這種方法的代碼在下面這篇文章裏有提供

http://www.cocoachina.com/ios/20150409/11505.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章