當呈現或解散VC時,我不想繼續隱藏和顯示tabBar,因爲它會創建糟糕的用戶體驗。相反,我想將下一個VC直接放在標籤欄上,這樣當我通過從左向右緩慢拖動下一個VC時,可以看到隱藏在視圖後面的TabBar(如下圖所示)當前視圖控制器當前帶有NavigationController的tabBarController
注意,我的應用程序有兩個與兩個VC(VCA,VCB)相關聯的選項卡。這兩個VC也都嵌入了導航欄。 VCA繼續到VCA1,VCB繼續到VCB1。目前,在VCA和VCB內部,我正在調用以下函數以在viewWillapar(下面的代碼)中執行一些隱藏和取消隱藏操作。
self.navigationController?.showViewController(vc, sender: self)
// Inside ViewWillAppear Only reappear the tab bar if we successfully enter Discover VC (To prevent drag back half way causing tab bar to cause comment entry to be floating). This code check if we have successfully enters DiscoverVC
if let tc = transitionCoordinator() {
if tc.initiallyInteractive() == true {
tc.notifyWhenInteractionEndsUsingBlock({(context: UIViewControllerTransitionCoordinatorContext) -> Void in
if context.isCancelled() {
// do nothing!
}
else {
// not cancelled, do it
self.tabbarController.tabBar.hidden = false
}
})
} else {
// not interactive, do it
self.tabbarController.tabBar.hidden = false
}
} else {
// not interactive, do it
self.tabbarController.tabBar.hidden = false
}
----------從戈庫爾工作液-----------
戈庫爾的答案是接近現貨上。我使用了他的解決方案,並提出了以下改進措施,以消除冗餘VC的需求,並且在tabVC出現之前也消除了短暫顯示的初始VC。但沒有Gokul,我永遠不會想出這個!
此外,Gokul的方法會爲我創建一個錯誤,因爲即使在顯示tabVC之前,我確實有一個初始的「正常」VC作爲LoginVC。如果用戶需要登錄,則此loginVC僅爲rootVC。所以通過在大多數情況下將rootVC設置爲tabVC,navVC將永遠不會被註冊。
解決方案是將導航控制器和tabBar控制器嵌入到一個VC中。但它只有在navVC位於TabBarVC之前時才起作用。我不知道爲什麼,但讓navVC-> tabVC-> VC1/VC2的唯一方法是首先將VC1與navVC嵌入,而不是再次單擊VC1以嵌入tabVC(它不允許我先插入一個tabVC和我也不得不在嵌入NavVC後再次點擊VC1)。
很好解釋,並很好的解決方案!非常感謝。我已經更新了我的回答,並對上述任何需要改進的人員進行了改進 – user172902
謝謝edward。 :) – Gokul