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手中的人,就像我以前一样,这里是步骤。
创建YourTransitioningDelegate,它符合UIViewControllerTransitioningDelegate。在这里,通常需要设置三件事情:PresentationController,PresentedAnimationController,DismissedAnimationController。
创建YourTransitionAnimator,它符合UIViewControllerAnimatedTransitioning。在这里,两个函数需要重写,transitionDuration和animateTransition(这是所有动画发生的位置,添加/删除和动画呈现的视图,让你在transitionContext上调用completeTransition来结束动画)。
子类UIPresentationController。取决于每个人的需求,你可能会在这里做很多事情。我只是添加了一个dimmingView并更改了presentViewController的框架。
最后,在呈现视图控制器之前,将事物挂钩,它将modalPresentationStyle更改为自定义并设置转换委托。
事情,我发现真正有用的,二2014 WWDC的视频(“视图控制器的进步”和“一看演示控制器内部”)和苹果公司(LookInside-photoEditingApp)的示例项目。
我想下面的更容易,它工作在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];
如果您需要默认的过渡样式,那么是的。 – Xing 2014-11-04 17:53:08
preferredContentSize对我来说工作正常。但我需要改变我在iOS 8中的位置。我必须使用哪个属性? – 2015-01-27 13:00:52
这是正确的答案! – 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);
}
是使与iOS 7这个兼容的唯一途径和iOS 8添加两个完全独立的呈现视图的方法(使用相应的代码),具体取决于它是否是iOS 8? – 2014-09-18 02:56:16
是的,UIPresentationController只是iOS 8。 – 2015-02-24 17:25:00