Как вы можете использовать автоматический макет с помощью метода перехода контейнера UIViewController:
-(void)transitionFromViewController:(UIViewController *)fromViewController
toViewController:(UIViewController *)toViewController
duration:(NSTimeInterval)duration
options:(UIViewAnimationOptions)options
animations:(void (^)(void))animations
completion:(void (^)(BOOL finished))completion;
Традиционно, используя Springs/Struts, вы устанавливаете начальные кадры (непосредственно перед вызовом этого метода) и настраиваете финальные кадры в блоке анимации, которые вы передаете методу.
Этот метод выполняет работу по добавлению представления в иерархию представлений и выполнению анимаций для вас.
Проблема заключается в том, что мы не можем добавлять начальные ограничения в одно и то же место (до вызова метода), потому что представление еще не добавлено в иерархию представления.
Любые идеи, как я могу использовать этот метод вместе с Auto Layout?
Ниже приведен пример (Спасибо, кокоэнетика) за это, используя Springs/Struts (frames) http://www.cocoanetics.com/2012/04/containing-viewcontrollers
- (void)transitionFromViewController:(UIViewController *)fromViewController toViewController:(UIViewController *)toViewController
{
// XXX We can't add constraints here because the view is not yet in the view hierarchy
// animation setup
toViewController.view.frame = _containerView.bounds;
toViewController.view.autoresizingMask = _containerView.autoresizingMask;
// notify
[fromViewController willMoveToParentViewController:nil];
[self addChildViewController:toViewController];
// transition
[self transitionFromViewController:fromViewController
toViewController:toViewController
duration:1.0
options:UIViewAnimationOptionTransitionCurlDown
animations:^{
}
completion:^(BOOL finished) {
[toViewController didMoveToParentViewController:self];
[fromViewController removeFromParentViewController];
}];
}