返回

UINavigationController的妙用:让iOS中的底部TabBar随心所欲

IOS

UINavigationController 中的 TabBar 显示与隐藏

引言

在 iOS 开发中,UINavigationController 扮演着举足轻重的角色。它提供了管理导航栏和页面跳转的便捷方式。然而,在实际开发中,开发者经常需要在页面跳转时隐藏或显示底部的 TabBar。本文将深入探讨如何使用 UINavigationController 实现 TabBar 的显示与隐藏,并提供代码示例和常见问题解答。

利用 hidesBottomBarWhenPushed 属性

要实现页面跳转时隐藏 TabBar 的需求,我们可以借助 UINavigationControllerhidesBottomBarWhenPushed 属性。该属性默认值为 false,表示在 push 新页面时,TabBar 不会被隐藏。如果我们将该属性设置为 true,那么在 push 新页面时,TabBar 将自动隐藏。

以下是一个代码示例:

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // 设置 hidesBottomBarWhenPushed 属性为 true
        self.navigationController?.hidesBottomBarWhenPushed = true
    }
}

通过设置 hidesBottomBarWhenPushedtrue,当我们从 ViewController push 到另一个页面时,TabBar 将自动隐藏。

恢复 TabBar 显示

但是,当我们 pop 回 ViewController 时,TabBar 并不会自动显示。为了解决这个问题,我们需要在 pop 之前将 hidesBottomBarWhenPushed 属性设置为 false。以下是一个代码示例:

class ViewController: UIViewController {

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)

        // 在 pop 之前将 hidesBottomBarWhenPushed 属性设置为 false
        self.navigationController?.hidesBottomBarWhenPushed = false
    }
}

通过在 viewWillDisappear 方法中将 hidesBottomBarWhenPushed 属性设置为 false,当我们 pop 回 ViewController 时,TabBar 将自动显示。

使用 setTabBarHidden 方法

除了使用 hidesBottomBarWhenPushed 属性,我们还可以通过 setTabBarHidden 方法手动控制 TabBar 的显示和隐藏。该方法接受一个布尔值作为参数,如果为 true,则隐藏 TabBar;如果为 false,则显示 TabBar。以下是一个代码示例:

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // 手动隐藏 TabBar
        self.tabBarController?.tabBar.isHidden = true
    }

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)

        // 手动显示 TabBar
        self.tabBarController?.tabBar.isHidden = false
    }
}

通过使用 setTabBarHidden 方法,我们可以更加灵活地控制 TabBar 的显示和隐藏。

选择合适的方法

在实际开发中,我们可以根据具体的业务需求来选择使用 hidesBottomBarWhenPushed 属性或 setTabBarHidden 方法来实现 TabBar 的显示与隐藏。

  • 使用 hidesBottomBarWhenPushed 属性: 当我们希望在 push 新页面时自动隐藏 TabBar,并在 pop 回页面时自动显示 TabBar 时,使用 hidesBottomBarWhenPushed 属性是一个简单而直接的方法。
  • 使用 setTabBarHidden 方法: 当我们希望更灵活地控制 TabBar 的显示和隐藏时,可以使用 setTabBarHidden 方法。

常见问题解答

1. 为什么 TabBar 在 pop 回页面时不显示?

原因可能是 hidesBottomBarWhenPushed 属性没有在 pop 之前被设置为 false

2. 如何在不 push 新页面时隐藏 TabBar?

可以使用 setTabBarHidden 方法直接隐藏 TabBar。

3. 如何在 TabBar 隐藏时保留 TabBar 的高度?

可以使用 additionalSafeAreaInsets 属性来保留 TabBar 的高度。

4. 如何在 Swift 5 中使用 setTabBarHidden 方法?

Swift 5 中的 setTabBarHidden 方法已被弃用,可以使用 tabBarController?.tabBar.isHidden 代替。

5. 如何在特定的页面中隐藏 TabBar?

可以在该页面的 viewWillAppear 方法中设置 hidesBottomBarWhenPushed 属性或 tabBarController?.tabBar.isHidden 属性来隐藏 TabBar。

总结

控制 UINavigationController 中的 TabBar 显示与隐藏是 iOS 开发中常见的需求。通过理解 hidesBottomBarWhenPushed 属性和 setTabBarHidden 方法,开发者可以轻松地实现这一功能,从而为用户提供更好的体验。