iOS7之后經(jīng)過(guò)滑動(dòng)返回導(dǎo)航欄隱藏和顯示帶來(lái)的坑

Apple 自從iOS7之后增加了屏幕邊緣右滑返回交互的支持,再配合UINavigationController的交換動(dòng)畫(huà),pop上一級(jí)的操作變的非常帶感,從此我很少使用點(diǎn)擊左上角導(dǎo)航欄返回按鈕了的方式返回.如果一個(gè)App不支持滑動(dòng)返回,那說(shuō)明太不注重客戶體驗(yàn)了,等iOS9出來(lái)后,基本上的App都支持7.0以上吧.

接下來(lái)講下滑動(dòng)返回處理導(dǎo)航欄的顯示和隱藏如果開(kāi)發(fā)者不好好理解這塊(動(dòng)畫(huà)效果),很容易給項(xiàng)目帶來(lái)非常不好的體驗(yàn).

比如:利用系統(tǒng)的UINavigationBar時(shí),返回手勢(shì)重若碰到前一個(gè)頁(yè)面有bar,后一個(gè)頁(yè)面沒(méi)bar,或者反過(guò)來(lái)時(shí)動(dòng)畫(huà)非常難看,要解決此問(wèn)題需要在滑動(dòng)返回的后要出現(xiàn)的viewController中寫(xiě)下面的代碼:

//隱藏

- (void)viewWillAppear:(BOOL)animated{

[super viewWillAppear:animated];

[self.navigationController setNavigationBarHidden:YES animated:animated];

//很多同學(xué)習(xí)慣這樣寫(xiě)

[self.navigationController setNavigationBarHidden:YES animated:YES];//帶動(dòng)畫(huà)結(jié)果在切換tabBar的時(shí)候viewController會(huì)有閃動(dòng)的效果不建議這樣寫(xiě)

}

//顯示

- (void)viewWillDisappear:(BOOL)animated {

[super viewWillDisappear:animated];

[self.navigationController setNavigationBarHidden:NO animated:animated];

}

為啥會(huì)這樣呢,我猜應(yīng)該是UINavigationController 在導(dǎo)航欄控制API上設(shè)計(jì)的缺陷,一個(gè)UINavigationController管理了N個(gè)UIViewController棧式的push和pop,而UINavigationBar 有UINavigationController管理.這就導(dǎo)致了UIViewConstroller無(wú)法控制自己上面bar單獨(dú)隱藏和顯示,非常類似UIApplication全局的status bar,不過(guò)在iOS7之后為viewController控制自己的status bar 提供下面的幾個(gè)方法:

-(BOOL)prefersStatusBarHidden;

-(UIStatusBarStyle)preferredStatusBarStyle;

-(UIStatusBarAnimation)preferredStatusBarUpdateAnimation;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容