Руководство по верстке верхнего расположения контроллера навигации не учитывается при переходе

Укороченная версия:

У меня проблема с автоматическим макетом верхнего макета при использовании в сочетании с пользовательским переходом иUINavigationController в iOS7. В частности, не соблюдается ограничение между верхним руководством по макету и текстовым представлением. Кто-нибудь сталкивался с этой проблемой?

Длинная версия:

У меня есть сцена, в которой однозначно определены ограничения (то есть сверху, снизу, слева и справа), которая отображает вид следующим образом:

Но когда я использую это с пользовательским переходом на контроллере навигации, верхнее ограничение к верхнему руководству по макету кажется отключенным, и оно выглядит следующим образом, как если бы верхнее руководство по макету было вверху экрана, а не внизу навигационного контроллера:

Может показаться, что «руководство по верстке» с контроллером навигации запутывается при использовании пользовательского перехода. Остальные ограничения применяются правильно. И если я поверну устройство и поверну его снова, все внезапно отобразится правильно, поэтому не похоже, что ограничения не определены должным образом. Аналогичным образом, когда я отключаю свой пользовательский переход, представления отображаются правильно.

Было сказано, что,_autolayoutTrace сообщает, чтоUILayoutGuide объекты страдают отAMBIGUOUS LAYOUTкогда я бегу:

(lldb) po [[UIWindow keyWindow] _autolayoutTrace]

Но эти направляющие всегда сообщаются как неоднозначные, когда я на них смотрю, хотя я убедился, что нет отсутствующих ограничений (я сделал обычный выбор контроллера представления и выбрал «Добавить отсутствующие ограничения для контроллера представления» или выбрал все из элементов управления и делать то же самое для них).

С точки зрения того, насколько точно я делаю переход, я указал объект, который соответствуетUIViewControllerAnimatedTransitioning вanimationControllerForOperation метод:

- (id<UIViewControllerAnimatedTransitioning>)navigationController:(UINavigationController *)navigationController
                                  animationControllerForOperation:(UINavigationControllerOperation)operation
                                               fromViewController:(UIViewController*)fromVC
                                                 toViewController:(UIViewController*)toVC
{
    if (operation == UINavigationControllerOperationPush)
        return [[PushAnimator alloc] init];

    return nil;
}

А также

@implementation PushAnimator

- (NSTimeInterval)transitionDuration:(id <UIViewControllerContextTransitioning>)transitionContext
{
    return 0.5;
}

- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext
{
    UIViewController* toViewController   = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
    UIViewController* fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];

    [[transitionContext containerView] addSubview:toViewController.view];
    CGFloat width = fromViewController.view.frame.size.width;

    toViewController.view.transform = CGAffineTransformMakeTranslation(width, 0);

    [UIView animateWithDuration:[self transitionDuration:transitionContext] animations:^{
        fromViewController.view.transform = CGAffineTransformMakeTranslation(-width / 2.0, 0);
        toViewController.view.transform = CGAffineTransformIdentity;
    } completion:^(BOOL finished) {
        fromViewController.view.transform = CGAffineTransformIdentity;
        [transitionContext completeTransition:![transitionContext transitionWasCancelled]];
    }];
}

@end

Я также сделал исполнение вышеизложенного, установивframe зрения, а неtransformс тем же результатом.

Я также попытался вручную убедиться, что ограничения повторно применяются путем вызоваlayoutIfNeeded, Я также пыталсяsetNeedsUpdateConstraints, setNeedsLayout, и т.д.

Итог, кто-нибудь успешно женился на пользовательском переходе контроллера навигации с ограничениями, которые используют верхнее руководство по расположению?

Ответы на вопрос(12)

Ваш ответ на вопрос