我是iOS开发的新手.现在我正在尝试隐藏我的标签栏,当我向下滚动时,向上滚动标签栏应该出现.我想像导航栏一样动画这个动画.对于导航栏,我只需单击“属性”检查器中的选项.我看到了工具栏的一些示例,但我不能将其用于tabbar.
self.tabBarController?.tabBar.hidden = true只是隐藏我的tabbar,但它不像导航控制器那样动画.
解决方法
这是我实际在生产应用程序中使用的代码.
它在Swift中,它也更新了UITabBar.hidden var.
func scrollViewWillBeginDragging(scrollView: UIScrollView) { if scrollView.panGestureRecognizer.translation(in: scrollView).y < 0{ changeTabBar(hidden: true,animated: true) } else{ changeTabBar(hidden: false,animated: true) } }
您还可以使用其他回调方法:
func scrollViewDidScroll(scrollView: UIScrollView) { ... }
但是如果你选择这样,那么你必须处理多个实际隐藏tabBar的辅助方法的调用.
func changeTabBar(hidden:Bool,animated: Bool){ var tabBar = self.tabBarController?.tabBar if tabBar!.hidden == hidden{ return } let frame = tabBar?.frame let offset = (hidden ? (frame?.size.height)! : -(frame?.size.height)!) let duration:NSTimeInterval = (animated ? 0.5 : 0.0) tabBar?.hidden = false if frame != nil { UIView.animateWithDuration(duration,animations: {tabBar!.frame = CGRectOffset(frame!,offset)},completion: { println($0) if $0 {tabBar?.hidden = hidden} }) } }
更新Swift 4
func changeTabBar(hidden:Bool,animated: Bool){ guard let tabBar = self.tabBarController?.tabBar else { return; } if tabBar.isHidden == hidden{ return } let frame = tabBar.frame let offset = hidden ? frame.size.height : -frame.size.height let duration:TimeInterval = (animated ? 0.5 : 0.0) tabBar.isHidden = false UIView.animate(withDuration: duration,animations: { tabBar.frame = frame.offsetBy(dx: 0,dy: offset) },completion: { (true) in tabBar.isHidden = hidden }) }