iOS - 优雅的隐蔽导航栏

源代码 2024-9-30 00:46:32 9 0 来自 中国
利用setNavigationBarHidden:animated:方法直接处置惩罚
- (void)viewWillAppearBOOL)animated {
    [super viewWillAppear:animated];
    [self.navigationController setNavigationBarHidden:true animated:animated];
}
- (void)viewWillDisappearBOOL)animated {
    [super viewWillDisappear:animated];
    [self.navigationController setNavigationBarHidden:false animated:animated];
}
这个使我们办理隐蔽导航栏起首会想到的方案,这种方式固然很好的办理了,首页隐蔽导航栏,push到新界面不隐蔽的场景。但如了局景会有个过分动画,很丢脸:
        首页必要隐蔽,push的新界面也必要隐蔽,这时就会有个隐蔽--体现--隐蔽的过分动画;
        首页隐蔽,然后在切换tabBar再返来,这时有一个导航栏向上消散的动画;
以是这种直接利用的方案,不完善,pass。
关键来了。。。
以上是对这种方式常见的总结形貌,颠末一番尝试,找到如下办理方案。
办理方案:发起只在对应的controller中的viewWillAppear方法中设置导航栏的体现或隐蔽,不处置惩罚viewWillDisappear方法
1、创建一个基类控制器,在基类中设置默认不隐蔽导航栏
@property (nonatomic, copy) void(^viewWillAppearNavigationBarHandler)(BOOL animated);
- (void)viewWillAppearBOOL)animated {
    [super viewWillAppear:animated];
    if (self.viewWillAppearNavigationBarHandler) {
        self.viewWillAppearNavigationBarHandler(animated);
    } else {
        [self.navigationController setNavigationBarHidden:NO animated:animated];
    }
}
2、必要隐蔽导航栏的控制器继续基类,然后在viewDidLoad初始化viewWillAppearNavigationBarHandler设置隐蔽导航栏即可。
- (void)viewDidLoad {
    [super viewDidLoad];
    __weak typeof(self) weakSelf =self;
    self.viewWillAppearNavigationBarHandler = ^(BOOL animated) {
        [weakSelf.navigationController setNavigationBarHidden:YES animated:animated];
    };
}
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-10-18 16:45, Processed in 0.170185 second(s), 32 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表