为了账号安全,请及时绑定邮箱和手机立即绑定

iPhone仅在第一页上隐藏导航栏

iPhone仅在第一页上隐藏导航栏

iOS
潇湘沐 2019-09-18 10:33:38
我有下面的代码隐藏并显示导航栏。它在第一个视图加载时隐藏,然后在调用“children”时隐藏。麻烦的是,当他们回到根视图时,我找不到触发它再次隐藏的事件/动作....我在根页面上有一个“测试”按钮,用于手动执行操作,但它并不漂亮,我希望它是自动的。-(void)hideBar {    self.navController.navigationBarHidden = YES;}-(void)showBar {           self.navController.navigationBarHidden = NO;}
查看完整描述

3 回答

?
倚天杖

TA贡献1828条经验 获得超3个赞

我发现最好的解决方案是在第一个视图控制器中执行以下操作。


Objective-C的


- (void)viewWillAppear:(BOOL)animated {

    [self.navigationController setNavigationBarHidden:YES animated:animated];

    [super viewWillAppear:animated];

}


- (void)viewWillDisappear:(BOOL)animated {

    [self.navigationController setNavigationBarHidden:NO animated:animated];

    [super viewWillDisappear:animated];

}

迅速


override func viewWillAppear(animated: Bool) {

    self.navigationController?.setNavigationBarHidden(true, animated: animated)

    super.viewWillAppear(animated)

}


override func viewWillDisappear(animated: Bool) {

    self.navigationController?.setNavigationBarHidden(false, animated: animated)

    super.viewWillDisappear(animated)

当您按下UIViewController堆栈上的下一个时,这将导致导航栏从左侧(与下一个视图一起)动画,并在您按下后面的后退按钮时向左移动(与旧视图一起)UINavigationBar。


请注意,这些不是委托方法,您要覆盖UIViewController这些方法的实现,并且根据文档,您必须在实现中的某处调用super的实现。


查看完整回答
反对 回复 2019-09-18
?
繁星淼淼

TA贡献1775条经验 获得超11个赞

我必须对其他答案进行一些轻微的调整,只是取消隐藏在viewWillDisappear中的栏,如果它消失的原因是由于推送了导航项目。这是因为视图可能因其他原因而消失。


所以如果这个视图不再是最顶层的视图,我只会取消隐藏栏:


- (void) viewWillDisappear:(BOOL)animated

{

    if (self.navigationController.topViewController != self)

    {

        [self.navigationController setNavigationBarHidden:NO animated:animated];

    }


    [super viewWillDisappear:animated];

}


查看完整回答
反对 回复 2019-09-18
  • 3 回答
  • 0 关注
  • 618 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信