nacho4d 的回答几乎是我想要的。但是,他在 navBar 可见之前改变了 navBar 的框架。所以我们看不到过渡动画。看起来navBar突然出现了。更何况,显示的时候statusBarFrame.size.height等于0。下面是他的代码:</p>
[[UIApplication sharedApplication] setStatusBarHidden:NO
withAnimation:UIStatusBarAnimationSlide];
[UIView animateWithDuration:animationDuration animations:^{
navBar.frame = CGRectMake(navBar.frame.origin.x,
statusBarFrame.size.height,
navBar.frame.size.width,
navBar.frame.size.height);
} completion:^(BOOL finished) {
[self.navigationController setNavigationBarHidden:NO animated:NO];
}];
在 Showing 时,我们希望我们可以使状态栏与导航栏一起滑动。这是我的答案:
UINavigationBar *navBar = self.navigationController.navigationBar;
[[UIApplication sharedApplication] setStatusBarHidden:hidden withAnimation:UIStatusBarAnimationSlide];
[UIView animateWithDuration:0.35 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{
// make navigationBar visual
if (!hidden)
{
[self.navigationController setNavigationBarHidden:hidden animated:NO];
}
navBar.frame = CGRectMake(navBar.frame.origin.x,
hidden ? -navBar.frame.size.height : 20,
navBar.frame.size.width,
navBar.frame.size.height);
} completion:^(BOOL finished) {
if (hidden)
{
[self.navigationController setNavigationBarHidden:hidden animated:NO];
}
}];
- 隐藏时,隐藏等于NO。我们应该先改变导航栏的框架,然后隐藏导航栏。
- 显示时,和隐藏等于YES。我们首先使 navBar 可视化,然后更改框架。
- 我们选择UIViewAnimationOptionCurveEaseOut,让它看起来更好。