先看看效果圖吧,看是否是你們想要的效果:
iPhone X
6S
其實思路很簡單,首先在繼承自UITabbarController的MainTabbarController中加入一個方法,用動畫的方式改變tabbar的y坐標(biāo).
func hideTabbar(hidden: Bool) {
UIView.animate(withDuration: 0.2) {
if hidden {
var frame = self.tabBar.frame
frame.origin.y = ScreenHeight
self.tabBar.frame = frame
} else {
var frame = self.tabBar.frame
frame.origin.y = ScreenHeight - KTabBarHeight
self.tabBar.frame = frame
}
}
}
其中KTabBarHeight代表tabbar高度用以適配iPhone X.
然后在繼承自UINavigationController的基類中做push操作,當(dāng)從首頁往下一級頁面push的時候調(diào)用tabbar的隱藏動畫,如下:
override func pushViewController(_ viewController: UIViewController, animated: Bool){
if (self.viewControllers.count == 1) {
let tabbarVC : MainTabBarController = self.tabBarController as! MainTabBarController
tabbarVC.hideTabbar(hidden: true)
}
super .pushViewController(viewController, animated: animated)
}
最后在繼承自UIViewController的基類中重寫viewDidAppear方法,當(dāng)首頁已經(jīng)出現(xiàn)后調(diào)用tabbar的顯示動畫.如下:
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
let tabbarVC : MainTabBarController = self.tabBarController as! MainTabBarController
if (self.navigationController?.viewControllers.count)! <= 1 {
tabbarVC.hideTabbar(hidden: false)
}
}
大致思路就是這樣,如果有什么更好的方法歡迎留言.