千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > iOS隐藏TabBar的实现方法

iOS隐藏TabBar的实现方法

来源:千锋教育
发布人:xqq
时间: 2023-11-25 04:54:59 1700859299

在iOS开发中,有很多时候我们需要隐藏TabBar,比如进入某个页面后不需要TabBar等。下面就从多个方面来讲解iOS隐藏TabBar的实现方法。

一、利用系统自带的方法

iOS系统提供了一个属性来控制TabBar的隐藏和显示:hidesBottomBarWhenPushed。可以在进入下一个页面前,将该属性设置为YES即可隐藏TabBar:

UIViewController *vc = [[UIViewController alloc] init];
vc.hidesBottomBarWhenPushed = YES;
[self.navigationController pushViewController:vc animated:YES];

需要注意的是,该方法只适用于跳转到下一个页面时隐藏TabBar,如果需要在同页面内隐藏TabBar,则需要采用其他方法。

二、手动隐藏TabBar

当需要在同一页面内隐藏TabBar时,可以手动隐藏,具体实现代码如下:

- (void)hideTabBar {
    UIView *contentView = self.view;
    CGFloat screenHeight = UIScreen.mainScreen.bounds.size.height;
    for (UIView *aView in contentView.subviews) {
        if ([aView isKindOfClass:[UITabBar class]]) {
            [UIView animateWithDuration:0.3 animations:^{
                CGRect frame = aView.frame;
                frame.origin.y = screenHeight;
                aView.frame = frame;
            }];
        } else {
            [UIView animateWithDuration:0.3 animations:^{
                CGRect frame = aView.frame;
                if (UIScreen.mainScreen.bounds.size.height == 812) {
                    frame.size.height = screenHeight - kTopHeight - kSafeBottomHeight;
                } else {
                    frame.size.height = screenHeight - kTopHeight - kTabBarHeight;
                }
                aView.frame = frame;
            }];
        }
    }
}

在需要隐藏TabBar的时候,调用hideTabBar方法即可。

三、自定义TabBar实现隐藏

有时候需要实现自定义的TabBar效果,并且在某些页面需要隐藏TabBar。这时候可以通过自定义TabBar来实现,具体步骤如下:

Step 1:创建自定义TabBar

创建自定义的TabBar,可以继承系统的UITabBar类,实现自己的TabBar样式。

// MyTabBar.h文件
#import 

@protocol MyTabBarDelegate 

- (void)centerButtonDidClick;

@end

@interface MyTabBar : UITabBar

@property (nonatomic, weak) id myDelegate;

@end

// MyTabBar.m文件
#import "MyTabBar.h"

@implementation MyTabBar

- (instancetype)init {
    self = [super init];
    if (self) {
        [self setupViews];
    }
    return self;
}

- (void)setupViews {
    UIButton *centerButton = [[UIButton alloc] init];
    [centerButton setImage:[UIImage imageNamed:@"tab_center"] forState:UIControlStateNormal];
    [centerButton sizeToFit];
    [centerButton addTarget:self action:@selector(centerButtonClicked) forControlEvents:UIControlEventTouchUpInside];
    [self addSubview:centerButton];
}

- (void)layoutSubviews {
    [super layoutSubviews];
    
    int index = 0;
    CGFloat buttonW = self.bounds.size.width / 5;
    CGFloat buttonH = self.bounds.size.height;
    CGFloat buttonY = 0;
    CGFloat centerX = self.bounds.size.width / 2;
    for (UIView *subview in self.subviews) {
        if ([subview isKindOfClass:NSClassFromString(@"UITabBarButton")]) {
            CGFloat buttonX = buttonW * (index > 1 ? index + 1 : index);
            subview.frame = CGRectMake(buttonX, buttonY, buttonW, buttonH);
            index++;
            
            if (index == 2) {
                index++;
            }
        }
    }
    
    UIButton *centerButton = self.subviews[4];
    centerButton.center = CGPointMake(centerX, centerButton.bounds.size.height / 2.0);
}

- (void)centerButtonClicked {
    if ([self.myDelegate respondsToSelector:@selector(centerButtonDidClick)]) {
        [self.myDelegate centerButtonDidClick];
    }
}

@end

Step 2:创建自定义TabBarController

创建自定义的TabBarController,继承系统的UITabBarController类,并在其viewWillAppear方法中隐藏TabBar。

// MyTabBarController.h文件
#import 
#import "MyTabBar.h"

@interface MyTabBarController : UITabBarController

@end

// MyTabBarController.m文件
#import "MyTabBarController.h"

@interface MyTabBarController ()

@property (nonatomic, strong) MyTabBar *myTabBar;

@end

@implementation MyTabBarController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.delegate = self;
    
    // 创建自定义TabBar
    MyTabBar *tabBar = [[MyTabBar alloc] init];
    tabBar.myDelegate = self;
    [self setValue:tabBar forKey:@"tabBar"]; // 使用KVC替换系统的TabBar
    self.myTabBar = tabBar;
}

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    
    // 隐藏系统TabBar
    for (UIView *view in self.tabBar.subviews) {
        view.hidden = YES;
    }
}

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController {
    return viewController != self.selectedViewController;
}

- (void)centerButtonDidClick {
    NSLog(@"Center Button Did Click.");
}

@end

使用自定义的TabBarController,并需要在某些页面隐藏TabBar时,只需要调用以下方法即可:

self.myTabBar.hidden = YES;

四、使用第三方库实现隐藏TabBar

在iOS开发中有很多第三方库可以用来隐藏TabBar,比如TabbarHide、DDHTabBar等。这里以TabbarHide为例:

Step 1:安装TabbarHide

pod 'TabbarHide', '~> 0.0.3'

Step 2:实现TabbarHide

在需要隐藏TabBar的时候,调用以下方法即可:

[self.tabBarController setTabBarHidden:YES animated:YES];

同样的,如果需要显示TabBar,也可以调用以下方法:

[self.tabBarController setTabBarHidden:NO animated:YES];

五、总结

以上便是iOS隐藏TabBar的实现方法,可以根据具体需求选择合适的方法来实现。如果需要在同一页面内隐藏TabBar,可以手动隐藏或自定义TabBar;如果需要在切换到下一个页面时隐藏TabBar,可以利用系统自带的方法;如果需要使用已有的第三方库,可以使用TabbarHide等相关库。

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT