ios 8更改呈现/模式视图控制器的大小

问题描述:

在ios 7和之前,我正在更新presentViewController.view.superview的边界以自定义呈现的视图控制器的大小,但似乎并非如此ios 8更多。由于没有superview可以在视图控制器上设置(当您尝试在调试器中调用它时返回nil)。ios 8更改呈现/模式视图控制器的大小

任何建议如何更新呈现的视图控制器的大小?这将用于自定义演示文稿转换。

如果任何人稍后遇到这种情况,这里是我如何解决它。

子类UIPresentationController并返回frameOfPresentedViewInContainerView中的帧。将其馈送到您为presentViewController创建的transitioningDelegate。

或者,您可以为animateTransition:中的presentView设置最后一帧,它属于您为transitioningDelegate创建的动画器对象。不过,这是iOS 7的老办法。由于Apple引入了UIPresentationController,所以应该在那里完成任何大小/帧更改,这是我前面提到的方法。

下面是一些额外的信息,可能与解决问题并不直接相关。

对于那些从来没有在苹果视图控制器转换api手中的人,就像我以前一样,这里是步骤。

  1. 创建YourTransitioningDelegate,它符合UIViewControllerTransitioningDelegate。在这里,通常需要设置三件事情:PresentationController,PresentedAnimationController,DismissedAnimationController。

  2. 创建YourTransitionAnimator,它符合UIViewControllerAnimatedTransitioning。在这里,两个函数需要重写,transitionDuration和animateTransition(这是所有动画发生的位置,添加/删除和动画呈现的视图,让你在transitionContext上调用completeTransition来结束动画)。

  3. 子类UIPresentationController。取决于每个人的需求,你可能会在这里做很多事情。我只是添加了一个dimmingView并更改了presentViewController的框架。

  4. 最后,在呈现视图控制器之前,将事物挂钩,它将modalPresentationStyle更改为自定义并设置转换委托。

事情,我发现真正有用的,二2014 WWDC的视频(“视图控制器的进步”和“一看演示控制器内部”)和苹果公司(LookInside-photoEditingApp)的示例项目。

+0

是使与iOS 7这个兼容的唯一途径和iOS 8添加两个完全独立的呈现视图的方法(使用相应的代码),具体取决于它是否是iOS 8? – 2014-09-18 02:56:16

+0

是的,UIPresentationController只是iOS 8。 – 2015-02-24 17:25:00

我想下面的更容易,它工作在iOS的8:除了

self.myViewController.modalPresentationStyle = UIModalPresentationFormSheet; 
self.myViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; 

//This will be the size you want 
self.myViewController.preferredContentSize = CGSizeMake(822, 549); 

[self presentViewController:self.myViewController animated:YES completion:nil]; 
+0

如果您需要默认的过渡样式,那么是的。 – Xing 2014-11-04 17:53:08

+0

preferredContentSize对我来说工作正常。但我需要改变我在iOS 8中的位置。我必须使用哪个属性? – 2015-01-27 13:00:52

+1

这是正确的答案! – pixelfreak 2015-04-23 23:03:11

继承您可以使用preferredContentSize财产

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    self.preferredContentSize = CGSizeMake((self.view.frame.size.width/100) * 65, (self.view.frame.size.height/100) * 65); 
}