Руководство по верстке верхнего расположения контроллера навигации не учитывается при переходе
Укороченная версия:
У меня проблема с автоматическим макетом верхнего макета при использовании в сочетании с пользовательским переходом и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
, и т.д.
Итог, кто-нибудь успешно женился на пользовательском переходе контроллера навигации с ограничениями, которые используют верхнее руководство по расположению?