如何控制TabBar显示与隐藏

 

1.为需要观察的UITabBarController添加观察者

 

    [tabBarController.tabBar addObserver:self forKeyPath:@"frame" options:NSKeyValueObservingOptionNew context:nil];
    [tabBarController.tabBar addObserver:self forKeyPath:@"hidden" options:NSKeyValueObservingOptionNew context:nil];


2.实现代理方法

 

 

 

 

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
    
    
}


3.现在push一个viewController,观察其断点运行轨迹,使用的是7plus模拟器

 

第一次:改变frame为NSRect: {{0, 687}, {414, 49}}

如何控制TabBar显示与隐藏_第1张图片

第二次:改变frame为NSRect: {{0, 687}, {414, 49}}

如何控制TabBar显示与隐藏_第2张图片

第三次:改变的hidden为1

如何控制TabBar显示与隐藏_第3张图片

 

到此完成push操作。

pop操作类似。

 

那我们怎么仿照这个来实现自定义的tabBar当不在主页自动隐藏呢?

1.自定义tabbar

 

//
//  AppDelegate.h
//  GuideLoginDemo
//
//  Created by yfc on 17/5/10.
//  Copyright © 2017年 yfc. All rights reserved.
//
#import 


typedef enum JumpType
{
    ZHUANZHANG_HOME_LOGIN = 0,
    HUIKUAN_HOME_LOGIN ,
    JIEKUAN_HOME_LOGIN ,
    
}MYJumpType;

@interface AppDelegate : UIResponder 

@property (strong, nonatomic) UIWindow *window;
@property (assign, nonatomic) BOOL isLogin;
@property (assign, nonatomic) MYJumpType jumpType;
@property (strong, nonatomic) UIView *defaultTabbar;//

@end

 

 

 

 

 

 

    //
    //自定义tabbar
    //
    _defaultTabbar = [[UIView alloc]initWithFrame:CGRectZero];
    _defaultTabbar.height = 64;
    _defaultTabbar.width = SCREEN_WIDTH_NEW;
    _defaultTabbar.top = SCREEN_HEIGHT_NEW - 64;
    _defaultTabbar.backgroundColor = [UIColor grayColor];
        [tabBarController.view addSubview:_defaultTabbar];
    
    tabBarController.tabBar.hidden = YES;

 

 

 

 

 

 

2.自定义导航控制器DefaultNavigationcontroller

 

//
//  DefaultNavigationcontrollerViewController.h
//  GuideLoginDemo
//
//  Created by yfc on 17/6/17.
//  Copyright © 2017年 yfc. All rights reserved.
//

#import 

@interface DefaultNavigationcontroller : UINavigationController

@end

 

//
//  DefaultNavigationcontrollerViewController.m
//  GuideLoginDemo
//
//  Created by yfc on 17/6/17.
//  Copyright © 2017年 yfc. All rights reserved.
//

#import "DefaultNavigationcontroller.h"
#import "config.h"
@interface DefaultNavigationcontroller ()

@end

@implementation DefaultNavigationcontroller

- (void)viewDidLoad {
    [super viewDidLoad];
    self.delegate = self;
}

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated;{
    
    if (viewController == self.childViewControllers[0]) {
        APPLICATION.defaultTabbar.hidden = NO;
    }else{
        APPLICATION.defaultTabbar.hidden = YES;
    }
}
@end


代码很简单,实现了一个代理方法。当前展示的如果是childViewControllers的第一个ViewController就展示否则隐藏。

 

 

20180927更新:代码就不传了,因为想到了更好的解决办法

如何控制TabBar显示与隐藏_第4张图片

 

 

把要push的controller(vc1)作为TabBarController(tabvc1)的同级别. 

 

如何控制TabBar显示与隐藏_第5张图片

 

你可能感兴趣的:(ios)