今天測(cè)試提了一個(gè)問題:在TabBarViewController的currentViewController 頁面屏幕左側(cè)邊緣向右滑一下(就是那種push到新頁面后側(cè)滑返回手勢(shì)),點(diǎn)擊當(dāng)前頁面的按鈕或者其他View想要跳轉(zhuǎn)到下一個(gè)ViewController ,發(fā)現(xiàn)跳轉(zhuǎn)失敗(實(shí)際不是跳轉(zhuǎn)失敗,而是新頁面出現(xiàn)在了當(dāng)前頁面的下面,當(dāng)前頁面把新頁面遮住了),我的項(xiàng)目類似于微信那樣,有5個(gè)TabBarItem,對(duì)應(yīng)有5個(gè)頁面,在每個(gè)頁面未跳轉(zhuǎn)新頁面前做這種側(cè)滑手勢(shì)都會(huì)出現(xiàn)這種問題。
我這個(gè)項(xiàng)目由于要自定義導(dǎo)航欄返回按鈕,所以我看到這個(gè)問題首先想到的是跟自定義返回按鈕有關(guān),眾所周知,自定義返回按鈕后側(cè)滑手勢(shì)就會(huì)失效,需要重寫代理self.interactivePopGestureRecognizer?.delegate = self,重寫代理后沒有重寫代理里面的方法,于是把這里面的方法好好看了一下(可參考網(wǎng)上文章),把問題鎖定在 gestureRecognizerShouldBegin這個(gè)代理方法的實(shí)現(xiàn)上,在首頁的時(shí)候,需要忽略手勢(shì),只有在push 到新的ViewController 后才需要識(shí)別手勢(shì):
extension BaseNavigationController {
//重寫代理方法
func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
if (children.count <= 1) {
return false
}
return true
}
}
然后問題解決。