Я использую пользовательский переход iOS 7 для представления UINavigationController. но существует проблема. во время анимации размер панели навигации составляет всего 44 точки. затем, после завершения анимации, навигационные контроллеры поняли, что есть строка состояния, поэтому добавили 20 точек для строки состояния.
мой вопрос в том, можно ли установить панель навигации на 64 точки при ее анимации, чтобы она больше не менялась после завершения анимации.
подробнее см. здесь Пользовательские переходы просмотра
Это мой собственный код анимации:
- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext{
UIViewController *toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
CGRect finalFrame = [transitionContext finalFrameForViewController:toViewController];
UIView *containerView = [transitionContext containerView];
CGRect screenBounds = [[UIScreen mainScreen] bounds];
toViewController.view.frame = CGRectOffset(finalFrame, 0, screenBounds.size.height);
[containerView addSubview:toViewController.view];
NSTimeInterval duration = [self transitionDuration:transitionContext];
[UIView animateWithDuration:duration delay:0.0 usingSpringWithDamping:0.6 initialSpringVelocity:0.0 options:UIViewAnimationOptionCurveLinear animations:^{
toViewController.view.frame = finalFrame;
} completion:^(BOOL finished) {
[transitionContext completeTransition:YES];
}];
}
ОБНОВЛЕНИЕ: кто-то решил эту проблему. но довольно хакерский. добавьте этот код после добавления toViewController.view в containerView.
if ([toViewController isKindOfClass:[UINavigationController class]]) {
UINavigationController* navigationController = (UINavigationController*) toViewController;
UINavigationBar* bar = navigationController.navigationBar;
CGRect frame = bar.frame;
bar.frame = CGRectMake(frame.origin.x, frame.origin.y + 20.0f, frame.size.width, frame.size.height);
}
есть ли лучший способ сделать это?