【问题标题】:UIViewController pushViewController, show navigationBarUIViewController pushViewController,显示导航栏
【发布时间】:2012-08-03 14:20:50
【问题描述】:

我有没有导航栏的 UIViewController(1),我需要推送另一个有导航栏的 UIViewController(2),当我点击返回时,导航栏必须隐藏在 1 个控制器上。我试过 uiviewcontroller 代表。 但是没有任何效果..

请帮忙..

【问题讨论】:

  • 您在使用情节提要吗?您是否在navigationController 中设置了第一个viewController
  • 是的,我做到了,但没有结果..
  • 澄清您的问题。我明白你想要做什么。为什么它不起作用?我可以看看你尝试了什么吗?正在发生的事情,而不是你想要的。关键在于 viewWillAppear...
  • 当您说没有任何工作时...“导航栏”在您不希望出现时出现?第二个'viewcontroller'不会推送?就像 Marol1ni 说的那样,您需要具体说明什么不起作用。
  • 你在任何地方都使用navigationController吗?

标签: ios iphone uiviewcontroller uinavigationbar


【解决方案1】:

将此代码放在第一个视图控制器中

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];        
    self.navigationController.navigationBarHidden = YES;
}

【讨论】:

    【解决方案2】:

    这将在第二个屏幕上显示导航栏:

    - (void)viewWillAppear:(BOOL)animated {
        [super viewWillAppear:animated];        
        self.navigationController.navigationBarHidden = NO;
    }
    

    当您返回第一个屏幕时,您还需要隐藏导航栏:

    - (void)viewDidDisappear:(BOOL)animated {
        [super viewDidDisappear:animated];        
        self.navigationController.navigationBarHidden = YES;
    }
    

    【讨论】:

    • 使用 -viewWillDisappear 代替 -viewDidDisappear 否则导航栏不会在第一个屏幕上隐藏。
    • 使用 - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; self.navigationController.navigationBarHidden = YES; } 因为当您返回屏幕 1 时 -viewDidDisappear 和 -viewWillDisappear 不起作用
    【解决方案3】:

    我认为您需要动画选项。如果您使用上述方法 (self.navigationController.navigationBarHidden = value),您会得到一些不受欢迎的视觉碎片。

    - (void)viewWillAppear:(BOOL)animated
    {
        [super viewWillAppear:animated];
    
        [self.navigationController setNavigationBarHidden:NO animated:YES];
    }
    
    - (void)viewWillDisappear:(BOOL)animated
    {
        [super viewWillDisappear:animated];
    
        [self.navigationController setNavigationBarHidden:YES animated:YES];
    }
    

    这将在导航栏牢固地连接到出现/消失的视图的情况下顺利推送/弹出。

    【讨论】:

      【解决方案4】:

      如果您要管理许多视图控制器的导航栏隐藏/显示状态,那么来自 Alfie 或 Ader 的回答将是一场灾难。

      我刚刚在 github 上发布了专门用于 UINavigationBar 外观管理的代码。查看RRViewControllerExtension,它将优雅地解决您的问题。

      使用RRViewControllerExtension,您甚至不必#import 头文件,您只需在视图控制器中覆盖下面的任何所需方法。

      //override any of the methods below in your viewcontroller's .m file to make specific navigation bar appearance
      
      -(BOOL)prefersNavigationBarHidden;
      -(BOOL)prefersNavigationBarTransparent;
      
      -(nullable UIColor *)preferredNavatationBarColor;
      -(nullable UIColor *)preferredNavigationItemColor;
      -(nullable UIImage *)preferredNavigationBarBackgroundImage;
      -(nullable NSDictionary *)preferredNavigationTitleTextAttributes;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多