app中經(jīng)常會(huì)出現(xiàn)一個(gè)界面到另外一個(gè)界面時(shí)皂林,兩個(gè)界面的NavigationBar狀態(tài)不一樣,UINavigationController提供了2種方法:
如果使用無動(dòng)畫的寫法乱凿,界面手勢(shì)返回的時(shí)候度宦,NavigationBar會(huì)一下子消失,效果看起來很不好告匠。
如果使用setNavigationBarHidden方法來更新Hidden狀態(tài)戈抄,蘋果在手勢(shì)交互的時(shí)候會(huì)自動(dòng)根據(jù)情況,顯示隱藏NavigationBar后专。
但是使用setNavigationBarHidden時(shí)划鸽,因?yàn)閷懛ㄊд`導(dǎo)致了一個(gè)隱藏很深的bug。
比如A跳轉(zhuǎn)到B戚哎,然后由B手勢(shì)返回到A裸诽,A和B將要出現(xiàn)的時(shí)候分別更新NavigationBar的Hidden狀態(tài),寫成了這樣
在UIView的animate動(dòng)畫的completion閉包中更新setNavigationBarHidden型凳,從B手勢(shì)返回到A后丈冬,再點(diǎn)擊A跳轉(zhuǎn)界面將會(huì)卡死,猜測(cè)應(yīng)該是內(nèi)部實(shí)現(xiàn)的動(dòng)畫死鎖了甘畅。
調(diào)用setNavigationBarHidden本身并不需要把它放在UIView.animate中埂蕊,不過就算放進(jìn)去也沒問題
但是不能把setNavigationBarHidden方法放到completion閉包中蓄氧,不然手勢(shì)返回的時(shí)候容易卡死。