1. 程式人生 > >將UINavigationBar設定為全透明的兩種方法

將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的顏色

這種方法的程式碼在下面這篇文章裡有提供

相關推薦

UINavigationBar設定透明方法

實現UINavigationBar的全透明是實現動態改變導航欄顏色的前提,我找到了兩種方法來實現這種效果 第一種 self.navigationController?.navigationBarHidden = true 第二種方法我找了好久,今天才知道 我嘗試過設定

設定div背景透明方法

css設定div背景透明有兩種方法:第一種使用opacity:0~1,這個方法有個缺點,就是內容也會跟著透明;第二種方法就是background-color:rgba(0,0,0,0~1),使用這個方法就只會設定div背景透明,而不會影響到div裡的內容。 說明一下back

C# web api返回型別設定json的方法

web api寫api介面時預設返回的是把你的物件序列化後以XML形式返回,那麼怎樣才能讓其返回為json呢,下面就介紹兩種方法: 方法一:(改配置法) 找到Global.asax檔案,在Application_Start()方法中新增一句:  。程式碼如下: Glo

C++ int轉換string的方法【to_string和sstream】

第一種是to_string函式,C++11新特性,使用非常方便,簡單查了下:c++11標準增加了全域性函式std::to_string,以及std::stoi/stol/stoll等等函式(這幾個就是

CentOS 7下修改默認網卡名eth0的方法

修改網卡eth0第一種方式這種方式適合在安裝操作系統的時候進行設置,點擊 Tab,打開kernel啟動選項,增加內核參數: net.ifnames=0 biosdevname=0--->Enter回車第二種方式修改網卡配置文件中的 DEVICE= 參數的關於 eth0[root@ansheng ~]

java程式漢字轉成拼音的方法-----------------第二方式

同樣需要下載pom檔案,匯入相應的jar包!!!!!! import net.sourceforge.pinyin4j.PinyinHelper;   import net.sourceforge.pinyin4j.format.HanyuPi

【C++】int轉換string的方法(to_string、字串流)轉載

int轉換成string的兩種方法 第一種是to_string函式,這是C++11新增的,使用非常方便,簡單查了下:C++11標準增加了全域性函式std::to_string,以及std::stoi/stol/stoll等等函式(這幾個就是string轉int,long,以及long lo

Vue-詳解設定路由導航的方法:router-link和router.push

轉自:http://www.cnblogs.com/superlizhao/p/8527317.html 一、<router-link :to="...">  to裡的值可以是一個字串路徑,或者一個描述地址的物件。例如: // 字串 <router

如果頁面表格裡的內容過長,設定隱藏顯示的方法

方法一 我使用了方法一但是沒有成功,問題是表格的寬度會隨著內容的長短而變化,找不到問題的癥結所以嘗試的方法二。 方法二: 做法基本上和方法一相同,最重要的區別是方法二藉助div實現,具體如下: 1>jsp頁面上程式碼: <td class="la" ><div

WPF程式DLL嵌入到EXE的方法

轉自:https://www.cnblogs.com/luoshupeng/p/3951597.html   這一篇可以看作是《Visual Studio 版本轉換工具WPF版開源了》的續,關於《Visual Studio 版本轉換工具WPF版開源了》可以參看地下地址(兩篇

java程式漢字轉成拼音的方法

1.使用pinyin4j將漢字轉成拼音,附件為pinyin4j的jar包  Java程式碼   import net.sourceforge.pinyin4j.PinyinHelper;   import net.sourceforge.piny

設定圓角圖片的方法

在專案需求中有時會要求將圖片設定成圓形的,尤其是頭像。將圖片設定成圓形暫時知道有兩種方法:1.設定圓角  2.將圖片進行裁剪。 方法1:設定圓角 程式碼: imagV.layer.cornerRa

【C++】int轉換string的方法(to_string、字串流)

記錄一下用到過的int轉換成string的兩種方法 第一種是to_string函式,這是C++11新增的,使用非常方便,簡單查了下:C++11標準增加了全域性函式std::to_string,以及std::stoi/stol/stoll等等函式(這幾個就是string轉i

Vue-詳解設定路由導航的方法: <router-link :to="..."> 和router.push(...)

一、<router-link :to="...">  to裡的值可以是一個字串路徑,或者一個描述地址的物件。例如: // 字串 <router-link to="apple"> to apple</router-link> // 物件 <rou

N76E003 復位引腳(P20)配置輸入的方法

由於N76E003管腳比較少,17個標準通用管腳,另外還有一個只能做輸入的引腳(RESET),在專案中就可能需要用到RESET引腳作為輸入,那麼問題來了,怎麼配置RESET引腳當作輸入呢?這裡介紹兩種方法。 先來看下手冊中的介紹,在“配置字”這一章。 主要配置紅色框的位,RPD(R

IntelliJ IDEA 設定預設 Maven 的方法

第一種: 在 IntelliJ IDEA 的初始化介面中,依次選擇“Configure”—>“Project Defaults”—>“Settings”,然後在“Default Preferences”裡的“Maven”中進行配置,即可。 第二種

基礎篇_執行緒 第 2 集 設定執行緒名稱方法:setName或者建構函式

練習1:建立兩個執行緒,和主執行緒交替執行。原來執行緒都有自己預設的名稱Thread——編號 該編號從0開始currentThread():獲取當前執行緒物件。getName():獲取執行緒名稱。設定執行緒名稱:setName或者建構函式。 class Test ext

Android RecyclerView:設定指定位置的方法

方法一,直接使用當前的manager /* RecyclerView 移動到當前位置, * * @param manager 設定RecyclerView對應的manager

詳解設定路由導航的方法

一、<router-link :to="...">  to裡的值可以是一個字串路徑,或者一個描述地址的物件。例如:// 字串 <router-link to="apple"> to apple</router-link> // 物件 <

WebApi返回型別設定json的三方法

方法一:(改配置法)  找到Global.asax檔案,在Application_Start()方法中新增一句: GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Cl