Ответ nacho4d - почти то, что я хотел. Но он меняет фрейм navBar до того, как будет виден navBar.Таким образом, мы не можем видеть анимацию перехода. Похоже, что NavBar появляются внезапно.Более того, при показе statusBarFrame.size.height равен 0. Вот его код:
[[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];
}];
при показе, мы хотели бы, чтобы строка состояния скользила с помощью панели навигации. вот мой ответ :
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 .мы должны сначала изменить фрейм navBar, а затем скрыть navBar.
- при отображении, а hidden , равный YES .мы сначала делаем navBar визуальным, затем меняем фрейм.
- выбираем UIViewAnimationOptionCurveEaseOut , чтобы он выглядел лучше.