我有没有导航栏的 UIViewController(1),我需要推送另一个有导航栏的 UIViewController(2),当我点击返回时,导航栏必须隐藏在 1 个控制器上。我试过 uiviewcontroller 代表。但没有任何工作..
请帮忙..
我有没有导航栏的 UIViewController(1),我需要推送另一个有导航栏的 UIViewController(2),当我点击返回时,导航栏必须隐藏在 1 个控制器上。我试过 uiviewcontroller 代表。但没有任何工作..
请帮忙..
这将在第二个屏幕上显示导航栏:
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
self.navigationController.navigationBarHidden = NO;
}
当您返回第一个屏幕时,您还需要隐藏导航栏:
- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
self.navigationController.navigationBarHidden = YES;
}
我想你想要动画选项。如果你使用上面的方法 ( 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];
}
这将推动/弹出与导航栏牢固地连接到出现/消失的视图。
将此代码放在第一个视图控制器中
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
self.navigationController.navigationBarHidden = YES;
}
如果您要管理许多视图控制器的导航栏隐藏/显示状态,那么来自 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;