Пользовательский переход iOS 7 с помощью UINavigationController

Я использую пользовательский переход 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);
}

есть ли лучший способ сделать это?


person Suparjito Teo    schedule 06.11.2013    source источник
comment
Показывает ли ваш контроллер from-view строку состояния? И показывает ли ваш контроллер to-view строку состояния?   -  person bilobatum    schedule 07.11.2013


Ответы (1)


У меня была та же проблема, и я решил добавить toViewController в контейнер, прежде чем установить этот фрейм.

Инвертируйте строки следующим образом:

[containerView addSubview:toViewController.view];
toViewController.view.frame = CGRectOffset(finalFrame, 0, screenBounds.size.height);
person Bivis    schedule 12.11.2013
comment
Вау, я долго искал и экспериментировал с этим - работает как шарм! - person t0PPy; 20.02.2014
comment
Потрясающая находка! Спасибо. - person hgwhittle; 22.01.2015