iOS 使用interactivePopGestureRecognizer導(dǎo)致導(dǎo)航欄標(biāo)題可能層次錯(cuò)亂的問(wèn)題解決

今天在做一個(gè)項(xiàng)目時(shí),又遇到一個(gè)奇葩的問(wèn)題:在右滑返回到一半時(shí),突然再往回拉,這時(shí)候?qū)Ш娇刂破髦蟮淖涌刂破鞯臉?biāo)題都錯(cuò)亂了,本來(lái)設(shè)置好的標(biāo)題一閃而過(guò),然后出現(xiàn)錯(cuò)誤的標(biāo)題。因?yàn)樵鹊捻?xiàng)目中沒(méi)有這個(gè)問(wèn)題,后來(lái)對(duì)比后才發(fā)現(xiàn),原來(lái)這個(gè)項(xiàng)目中的rootViewController的導(dǎo)航欄設(shè)置為了隱藏,其他子控制器導(dǎo)航欄不隱藏,問(wèn)題就出現(xiàn)在這里,我原先的設(shè)置方法是這樣的在viewWillAppear方法中設(shè)置self.navigationController.navigationBarHidden = YES;
是的,就是這句話導(dǎo)致了問(wèn)題的出現(xiàn),后來(lái)改為了加上動(dòng)畫(huà)隱藏就OK了,[self.navigationController setNavigationBarHidden:YES animated:YES];

iOS7中視圖控制器之間的導(dǎo)航自帶了手勢(shì)返回的功能,這個(gè)功能默認(rèn)就是存在的,但是當(dāng)我們自定義導(dǎo)航控制器的返回按鈕時(shí),常常會(huì)導(dǎo)致手勢(shì)返回功能失效。
iOS7自帶的手勢(shì)返回,主要用到的是UINavigationController類的interactivePopGestureRecognizer屬性,在上述原因?qū)е碌氖謩?shì)返回功能失效情況發(fā)生時(shí),可以通過(guò)重新設(shè)置interactivePopGestureRecognizer的代理,來(lái)使這個(gè)手勢(shì)重新可用,網(wǎng)上有很多解決方案,一般會(huì)把interactivePopGestureRecognizer.delegate設(shè)置為導(dǎo)航控制器自己即可。
這樣設(shè)置之后還會(huì)遇到許多問(wèn)題,需要各個(gè)擊破,比如push的過(guò)程中激活手勢(shì)會(huì)導(dǎo)致crash,在rootViewController中滑動(dòng)的時(shí)候,再想push到下一個(gè)頁(yè)面界面會(huì)卡死在那兒,解決方案通常是在UINavigationController的代理方法或重寫(xiě)UINavigationController的方法,在合適的時(shí)刻禁用手勢(shì)與重啟手勢(shì)來(lái)實(shí)現(xiàn)。如下面代碼:

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated{
    if ([self respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
        self.interactivePopGestureRecognizer.enabled = NO;
    }
    [super pushViewController:viewController animated:animated];
}

- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated{
    if ([navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
        navigationController.interactivePopGestureRecognizer.enabled = YES;
    }
    
    if (navigationController.viewControllers.count == 1) {
        navigationController.interactivePopGestureRecognizer.enabled = NO;
    }
}

此外,還有可能會(huì)遇到在使用右滑手勢(shì)返回到一半時(shí),導(dǎo)航欄上出現(xiàn)三個(gè)藍(lán)點(diǎn)的情況,這個(gè)問(wèn)題通常設(shè)置子控制器的self.navigationItem.title = @""即可解決。

最后編輯于
?著作權(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)容

  • *7月8日上午 N:Block :跟一個(gè)函數(shù)塊差不多,會(huì)對(duì)里面所有的內(nèi)容的引用計(jì)數(shù)+1,想要解決就用__block...
    炙冰閱讀 2,727評(píng)論 1 14
  • 有感 ....請(qǐng)?jiān)试S我在文章開(kāi)篇爆句粗口, 就這導(dǎo)航欄錯(cuò)亂這 Bug, 我真日了狗了. 自從測(cè)試小伙伴發(fā)現(xiàn)這個(gè)問(wèn)...
    李國(guó)安閱讀 6,582評(píng)論 59 108
  • 1.自定義控件 a.繼承某個(gè)控件 b.重寫(xiě)initWithFrame方法可以設(shè)置一些它的屬性 c.在layouts...
    圍繞的城閱讀 3,698評(píng)論 2 4
  • 小說(shuō)以2015年互聯(lián)網(wǎng)金融跑路風(fēng)潮大量涌現(xiàn)為背景,金融創(chuàng)新光環(huán)下財(cái)富與希望雙重迷失的蕓蕓眾生,如何在一片荒蕪中經(jīng)受...
    天域黎叔閱讀 251評(píng)論 0 1
  • 我想有一個(gè)知己 最好不要超過(guò)20歲的年紀(jì) 在落日的夕陽(yáng)下,說(shuō)一些美麗的話 她或者他都可以 只是希望 那時(shí) 我們擁有...
    陳浮點(diǎn)閱讀 367評(píng)論 0 1

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