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}}
第二次:改变frame为NSRect: {{0, 687}, {414, 49}}
第三次:改变的hidden为1
到此完成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更新:代码就不传了,因为想到了更好的解决办法
把要push的controller(vc1)作为TabBarController(tabvc1)的同级别.