ios如何隐藏TabBar?

本文介绍了一种自定义UITabBarController样式的方法,通过在原有TabBar上叠加自定义层来实现个性化展示,并提供了如何在进入子ViewController时隐藏原生TabBar的详细步骤。

系统自带的UITabBarController有时候到不到要求,需要自定义样式。

有一种方法就是在TabBar上面在放一层自己的,正好把原来的遮住。

那么,从Tab进入子的Controller想要隐藏TabBar怎么办呢?

假如说你是用 TabBar + Navigation来做的,从第一个Tab——TabBar1进入子Controller(称作A),

逻辑很简单,就是从TabBar1点击进入A,

你需要在TabBar1点击事件(A显示之前)加上

self.hidesBottomBarWhenPushed = YES;

然后在A的viewWillAppear中把你自己自定义,也就是覆盖在系统TabBar上面的东西隐藏;

在viewWillDisappear中再将其显示就可以了。


示例代码如下:

点击事件:

TabNoticeController *vc = [[TabNoticeController alloc] init];

self.hidesBottomBarWhenPushed = YES;

[self.navigationController pushViewController:vc animated:YES];

[vc release];


A中的代码:

- (void)viewWillAppear:(BOOL)animated {

[xxxTabBarsetTabBarHidden:YES];

}

- (void)viewWillDisappear:(BOOL)animated {

[xxxTabBarsetTabBarHidden:NO];

}


iOS 开发中,隐藏 `UITabBarController` 的 `tabBar` 是一个常见的需求,尤其是在某些页面中不希望用户切换 tab 的情况下。以下是几种实现方式,适用于不同的场景: ### 1. 使用 `hidesBottomBarWhenPushed` 隐藏 TabBar 如果你是通过 `UINavigationController` push 到一个新的 `UIViewController` 页面,并希望在此页面中隐藏 `tabBar`,可以使用系统提供的属性 `hidesBottomBarWhenPushed`。这个属性适用于 `UINavigationController` 管理的页面栈。 ```swift class DetailViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() self.hidesBottomBarWhenPushed = true } } ``` 此方式仅在 push 的页面生效,返回上一页时会自动恢复 `tabBar` 的显示[^2]。 --- ### 2. 直接修改 `tabBar` 的隐藏状态 如果你希望在 `UITabBarController` 本身控制 `tabBar` 的隐藏,可以通过修改 `tabBar` 的 `isHidden` 属性来实现。例如在某个子控制器中: ```swift override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) self.tabBarController?.tabBar.isHidden = true } override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) self.tabBarController?.tabBar.isHidden = false } ``` 这种方式适用于需要在某个特定页面中隐藏 `tabBar`,并且不会影响导航栈的结构[^1]。 --- ### 3. 自定义动画隐藏 TabBar 在某些场景中,可能需要通过动画方式隐藏 `tabBar`,以提升用户体验。可以通过修改 `tabBar` 的 frame 实现滑动隐藏效果。 ```swift func hideTabBarAnimated() { guard let tabBar = self.tabBarController?.tabBar else { return } UIView.animate(withDuration: 0.3) { tabBar.frame = CGRect(x: tabBar.frame.origin.x, y: UIScreen.main.bounds.height + 20, width: tabBar.frame.width, height: tabBar.frame.height) } } func showTabBarAnimated() { guard let tabBar = self.tabBarController?.tabBar else { return } UIView.animate(withDuration: 0.3) { tabBar.frame = CGRect(x: tabBar.frame.origin.x, y: UIScreen.main.bounds.height - tabBar.frame.height, width: tabBar.frame.width, height: tabBar.frame.height) } } ``` 这种方式可以结合用户交互,实现更灵活的 UI 控制[^4]。 --- ### 4. 自定义 TabBar 控制器结构 如果你正在构建一个基于 `UITabBarController` 的首页结构,如包含多个子控制器(如 `DiscoveryController`、`VideoController` 等),可以在每个子控制器中统一管理 `tabBar` 的显示逻辑,或在基类中封装通用行为[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值