4

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

请帮忙..

4

4 回答 4

10

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

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

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

- (void)viewDidDisappear:(BOOL)animated {
    [super viewDidDisappear:animated];        
    self.navigationController.navigationBarHidden = YES;
}
于 2012-08-06T16:36:20.633 回答
2

我想你想要动画选项。如果你使用上面的方法 ( 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];
}

这将推动/弹出与导航栏牢固地连接到出现/消失的视图。

于 2015-02-26T16:50:27.960 回答
1

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

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];        
    self.navigationController.navigationBarHidden = YES;
}
于 2012-08-06T15:58:04.813 回答
0

如果您要管理许多视图控制器的导航栏隐藏/显示状态,那么来自 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;
于 2018-09-27T01:35:52.757 回答