一尘不染

在iOS8中使用Swift轻触时如何隐藏/显示tabBar

swift

我试图hidesBarsOnTap用选项卡栏模仿UINavigationController的新功能。我已经看到了很多答案,它们要么指向hidesBottomBarWhenPushed在viewController上设置,仅将其完全隐藏而不是在点击时隐藏。

 @IBAction func tapped(sender: AnyObject) {

    // what goes here to show/hide the tabBar ???


}

提前致谢

编辑:根据下面我的建议

self.tabBarController?.tabBar.hidden = true

实际上确实隐藏了tabBar(在点击时切换true / false),但是没有动画。我将作为一个单独的问题提出。


阅读 239

收藏
2020-07-07

共1个答案

一尘不染

经过大量的探索并尝试了各种方法来使用Swift优雅地隐藏/显示UITabBar,我得以danh采纳了这个出色的解决方案并将其转换为Swift:

func setTabBarVisible(visible: Bool, animated: Bool) {

    //* This cannot be called before viewDidLayoutSubviews(), because the frame is not set before this time

    // bail if the current state matches the desired state
    if (tabBarIsVisible() == visible) { return }

    // get a frame calculation ready
    let frame = self.tabBarController?.tabBar.frame
    let height = frame?.size.height
    let offsetY = (visible ? -height! : height)

    // zero duration means no animation
    let duration: TimeInterval = (animated ? 0.3 : 0.0)

    //  animate the tabBar
    if frame != nil {
        UIView.animate(withDuration: duration) {
            self.tabBarController?.tabBar.frame = frame!.offsetBy(dx: 0, dy: offsetY!)
            return
        }
    }
}

func tabBarIsVisible() -> Bool {
    return (self.tabBarController?.tabBar.frame.origin.y)! < self.view.frame.maxY
}

// Call the function from tap gesture recognizer added to your view (or button)

@IBAction func tapped(_ sender: Any?) {
    setTabBarVisible(visible: !tabBarIsVisible(), animated: true)
}
2020-07-07