sim*_*eon 10 objective-c uiviewcontroller ios uimodalpresentationstyle presentviewcontroller
我有一个使用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
}
}
Run Code Online (Sandbox Code Playgroud)
编辑2:做一些研究,我注意到我的自定义呈现视图控制器的视图的框架正在设置当模态堆栈中它上面的视图控制器被解除时.以下堆栈跟踪导致框架设置为全屏:
0 -[MyCustomPresentedViewControllerView setFrame:]
1 -[UIView(MPAdditions) setFrameOrigin:]
2 -[UIViewControllerAccessibility(SafeCategory) dismissViewControllerWithTransition:completion:]
3 -[UIViewController dismissViewControllerAnimated:completion:]
Run Code Online (Sandbox Code Playgroud)
通过分配更改演示样式:
viewController.modalPresentationStyle = UIModalPresentationOverCurrentContext;
导致模态呈现控制器占据屏幕的一小部分,与UIPresentationController.
但是,viewController.modalPresentationStyle = UIModalPresentationOverFullScreen
在这种情况下使用更好,因为他的模态控制器是全屏的。
尝试使用:
viewController.modalPresentationStyle = UIModalPresentationOverCurrentContext;
Run Code Online (Sandbox Code Playgroud)
它在 iOS 8.1 中对我有帮助