【发布时间】:2014-10-03 05:38:43
【问题描述】:
我有一个使用UIModalPresentationCustom 呈现风格呈现的视图控制器。我使用自定义UIViewControllerTransitioningDelegate 将视图控制器呈现为侧边栏(因此它从屏幕边缘滑入并且不占据全屏)。
然而,当我使用UIModalPresentationFullScreen 呈现另一个视图控制器时——然后关闭全屏视图控制器,我的底层自定义呈现控制器突然调整大小以占据全屏。有谁知道为什么会这样?
编辑:这本质上是我的animateTransition 呈现侧边栏的方法——我已经删除了大部分代码以使其可读。基本上,它从 transitionContext 中获取容器,将目标视图控制器的视图添加到容器中并为其设置动画。
- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext
{
UIView *container = transitionContext.containerView;
UIViewController *fromVC = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
UIViewController *toVC = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
UIView *fromView = fromVC.view;
UIView *toView = toVC.view;
if( toVC.isBeingPresented )
{
[container addSubview:toView];
//... Animate some new frame for toView
//Call [transitionContext completeTransition:YES] on animation completion
}
else
{
//... Animate fromView out
//On completion remove fromView from superview
//Call [transitionContext completeTransition:YES] on animation completion
}
}
编辑 2:做更多的研究,我注意到当模式堆栈中的视图控制器上方被解除时,我的自定义呈现视图控制器的视图的框架正在设置。以下堆栈跟踪导致框架被设置为全屏:
0 -[MyCustomPresentedViewControllerView setFrame:]
1 -[UIView(MPAdditions) setFrameOrigin:]
2 -[UIViewControllerAccessibility(SafeCategory) dismissViewControllerWithTransition:completion:]
3 -[UIViewController dismissViewControllerAnimated:completion:]
【问题讨论】:
-
也许问题出在您的过渡委托的代码上。贴出相关代码。
标签: ios objective-c uiviewcontroller presentviewcontroller uimodalpresentationstyle