带有自定义转场的自动布局

Posted

技术标签:

【中文标题】带有自定义转场的自动布局【英文标题】:Autolayout with custom segues 【发布时间】:2012-10-03 21:58:09 【问题描述】:

我正在尝试使用自定义 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];

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

这让我很困惑,如果需要任何帮助,请告诉我是否需要更多详细信息。

【问题讨论】:

【参考方案1】:

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

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];

【讨论】:

以上是关于带有自定义转场的自动布局的主要内容,如果未能解决你的问题,请参考以下文章

断言失败 - 带有自动布局和自定义 UICollectionViewFlowLayout 的 UITableViewCell 内的 CollectionView

带有自动布局的 NSInternalInconsistencyException

自定义 tableviewcell 和自动布局

如何以编程方式使用自动布局添加自定义视图

如何在 iOS 6 中使用具有多个子视图的现有自定义视图自动布局

自动布局指南:UIImagePickerController W /自定义叠加不会旋转