显示/隐藏带有平滑动画的导航栏

4th*_*ace 51 iphone cocoa-touch objective-c uinavigationcontroller

我有一个基于导航的应用程序.第一个视图(rootcontroller)仅以三个大按钮开头.没有导航栏.从那里,其他一切都是tableviews和导航栏.我这样做是为了显示/隐藏导航栏:

MyAppAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
appDelegate.navigationController.navigationBar.hidden = NO;
Run Code Online (Sandbox Code Playgroud)

一旦我离开根控制器,导航栏就会猛拉到位并放在桌面视图的顶部,而不是将其向下推.它剪辑了tableview的顶部.回到根控制器并不是导航栏消失的方式.是否有更顺畅/更好的方法来完成隐藏根控制器的导航栏?

Jam*_*uld 118

您可以使用它[navigationController setNavigationBarHidden:YES animated:YES]来平滑地隐藏栏.

参考

  • 混合navigationController.navigationBar.hidden = NO与setNavigationBarHidden导致一些奇怪的东西,隐藏只是不适合我.使用单一方法时工作正常. (3认同)

cod*_*urn 11

这段漂亮的代码动画隐藏了导航栏,没有UI问题:

[navigationController setNavigationBarHidden: YES animated:YES]

但...

  1. 使用self.navigationController.navigationBarHidden属性检查代码而不是self.navigationController.navigationBar.hidden属性.这将为您带来意外的UI定位问题带来的痛苦.
  2. 注意将此方法置于- (void)viewWillAppear:(BOOL)动画或稍后在视图生命周期中.这是推荐的,因为如果你在- (void)viewDidLoad中执行它,你会在动画期间从一个视图中获得一个丑陋的黑色矩形视图,该视图将其导航栏显示到一个不显示的视图!例如,如果您的主视图隐藏了其导航栏但其所有子项都显示了导航栏,则当您弹出到主视图时,动画将显示黑色条代替导航栏,直到动画完成