Autolayout与自定义segues

时间:2012-10-03 21:58:09

标签: objective-c ios xcode autolayout

我试图在具有自定义segue的两个视图控制器之间交叉溶解,segue正确启动并按预期执行动画 - 但是在横向模式下,目标视图控制器在动画持续时间内以纵向布局显示。动画完成后,目标视图控制器将“捕捉”到其横向布局。两个视图控制器都使用自动布局设置。

以下是我的自定义segue的“执行”方法:

- (void)perform
{
  UIViewController *srcController = self.sourceViewController;
  UIViewController *dstController = self.destinationViewController;
  dstController.view.transform = srcController.view.transform;

  [UIView transitionFromView:srcController.view 
                      toView:dstController.view 
                    duration:self.animationDuration 
                     options:self.animationOptions 
                  completion:self.animationCompletionBlock];
}

是否需要手动告诉目标视图控制器在显示之前触发自动布局?如果是这样,将如何执行?使用带有交叉溶解的内置segue似乎没有遇到这个问题,我尝试(没有成功)确定我的自定义segue没有做什么。

这让我感到困惑了一段时间,任何帮助都会受到赞赏,如果需要更多细节,请告诉我。

1 个答案:

答案 0 :(得分:2)

事实证明,解决这个问题的方法比我想象的要简单得多。添加以下行可确保目标视图控制器在布置其元素时具有正确的边界:

dstController.view.bounds = srcController.view.bounds;

所以代码的其余部分变为:

- (void)perform
{
  UIViewController *srcController = self.sourceViewController;
  UIViewController *dstController = self.destinationViewController;
  dstController.view.transform = srcController.view.transform;
  dstController.view.bounds = srcController.view.bounds;

  [UIView transitionFromView:srcController.view 
                      toView:dstController.view 
                    duration:self.animationDuration 
                     options:self.animationOptions 
                  completion:self.animationCompletionBlock];
}