我是iOS开发的新手。现在,当我向下滚动并且向上滚动时,我想隐藏我的标签栏。我希望以与导航栏相同的方式对此进行动画处理。对于导航栏,我只需单击“属性”检查器中的选项。我看到了工具栏的一些示例,但是我不能采用它作为标签栏。
self.tabBarController?.tabBar.hidden = true 只是隐藏了我的标签栏,但它没有像导航控制器那样具有动画效果。
self.tabBarController?.tabBar.hidden = true
这是我在生产应用程序中实际使用的代码。
它在 Swift中 ,还更新了UITabBar.hiddenvar。
UITabBar.hidden
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的helper方法的多次调用。
然后,您需要添加此方法来对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!, 0, 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 }) }