ответ 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];
}
}];
- когда Hidding и скрытого равного NO. мы должны сначала сменить рамку navBar, а затем скрыть navBar.
- при показе, и скрыто, равное ДА. сначала делаем navBar визуальным, затем меняем рамку.
- мы выбираем UIViewAnimationOptionCurveEaseOut, чтобы он выглядел лучше.
Я подал сообщение об ошибке с Apple: http://openradar.appspot.com/8548087 Пожалуйста, обманите его, если вы тоже пострадали. –