前兩天, 在把玩自家 App 應(yīng)用的時候,發(fā)現(xiàn)了導(dǎo)航欄的一些過渡動畫小瑕疵,雖然不影響大局使用,但對于我這種 ‘偽強(qiáng)迫癥患者’ 簡直就是不能忍受,經(jīng)過兩天的閑暇時間加班研究,終于使導(dǎo)航欄的動畫效果變得舒服完美,心里頓時就美滋滋啦,避免小伙伴們跟我一樣走入誤區(qū), 就寫篇文章大家一起討論討論~
NavigationBar 怎么使用的我就不說了,很簡單而且Google 中有大把教程,我主要就說下我遇到的幾個問題,閑話少說了,我就直接上圖
第一個問題很簡單,只不過是設(shè)置 navgationBar 的隱藏屬性時沒有設(shè)置 動畫效果, 修改成 true 即可
navigationController?.navigationBar.isHidden = true
navigationController?.isNavigationBarHidden = true
navigationController?.setNavigationBarHidden(true, animated: false)
不管用上面三種哪個方法都修改為 :
navigationController?.setNavigationBarHidden(true, animated: animated)
第一個問題解決了, 第二個問題就有點難了, 在項目中右劃返回到一半時迅速撤回會使 navgationBar 丟失,但是緩慢撤回并不會影響到 NavgationBar. 這個問題困擾了我挺長時間的,因為并不知道是哪里出了問題, 只能使用排除法.
首先呢我想到了是不是因為基類的緣故,在項目中我是利用判斷來進(jìn)行 bar 的隱藏的,會不會是因為先前的動畫效果沒有執(zhí)行完畢,撤回的太快就沒有執(zhí)行顯示的方法,所以我就先將兩個頁面拆解出來,然而發(fā)現(xiàn)并沒有卵用.所以那就不是這方面的問題了,
然后,我猜想是不是執(zhí)行代碼的邏輯順序有問題,我就調(diào)整了一下代碼的執(zhí)行順序,發(fā)現(xiàn)也并沒有什么卵用..我就懵逼了,真的是沒法想出來了,各種求救也是無果.
真是車到山前必有路,在一個偶然的情況下, 我刪除了執(zhí)行 狀態(tài)欄樣式的方法
override var preferredStatusBarStyle: UIStatusBarStyle {
return UIStatusBarStyle.lightContent
}
竟然神奇一般的好了, 不管怎么樣畢竟問題已經(jīng)找到了, 那就開始著手解決吧,這個方法使用不通,那我們使用屬性修改吧, 但是修改屬性也不行,因為 StatusBarStyle 的屬性是 get-only 的, 只能讀取,沒有修改的權(quán)限.
既然修改不了當(dāng)前頁面的 StatusBar 那就只能修改系統(tǒng)的 StatusBar 了, 在有關(guān)頁面的 viewWillAppear 方法中都寫上修改方法
UIApplication.shared.statusBarStyle = .default
對了,利用這個屬性設(shè)置的 StatusBarStyle 的話, 需要在info.plist文件中添加一個屬性行,選中表空白地方鳄梅,右鍵選中Add Row, 然后在列表中選中最后一個選項粟焊,也就是View controller-based status bar appearance孙蒙,設(shè)置為No(不支持在文件中設(shè)置狀態(tài)欄樣式),然后在AppDelegate中寫上UIApplication.shared.statusBarStyle = .LightContent香追,這樣的話透典,全局的狀態(tài)欄樣式就OK了。其他的界面如果想要改變樣式的話峭咒,直接用
UIApplication.shared.statusBarStyle = .default 修改就可以了岖圈。
雖然這個方法使用起來是可以解決問題的,但是這個問題為什么出現(xiàn)我暫時還沒想通,如果有哪位好漢知道該問題的原理,不要吝嗇~敬請賜教哈!