ios 8改变了呈现/模态视图控制器的大小

时间:2014-09-12 14:58:12

标签: objective-c uiviewcontroller size ios8

在ios 7和之前,我正在更新presentViewController.view.superview的边界以自定义呈现的视图控制器的大小,但似乎在ios 8中不再是这种情况。由于没有superview可以在视图控制器上设置(当你尝试在调试器中调用它时返回nil)。

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

3 个答案:

答案 0 :(得分:16)

我想以下内容更容易,适用于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];

答案 1 :(得分:12)

如果有人后来碰到这个,我就是这样解决的。

对UIPresentationController进行子类化并在frameOfPresentedViewInContainerView中返回该帧。将其输入您为presentViewController创建的transitioningDelegate。

或者,您可以在animateTransition中设置presentView的最终帧:属于您为transitioningDelegate创建的动画对象。但是,这是旧iOS 7的做法。由于Apple引入了UIPresentationController,所以应该在那里进行任何大小/帧更改,这是我之前提到的方法。

以下是一些可能与解决问题无直接关系的额外信息。

对于那些从未接触到苹果视图控制器转换api的人,就像我之前一样,这里是步骤。

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

  2. 创建符合UIViewControllerAnimatedTransitioning的YourTransitionAnimator。这里,需要覆盖两个函数,transitionDuration和animateTransition(这是所有动画发生的地方,添加/删除和动画显示的视图。让你在transitionContext上调用completeTransition来结束动画)。

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

  4. 最后,在呈现视图控制器之前解决问题,即将modalPresentationStyle更改为自定义并设置转换委托。

  5. 我发现真正有用的东西,两个2014年WWDC视频("视图控制器改进"以及#34;查看演示控制器内部")和来自Apple的示例项目(LookInside-photoEditingApp)。

答案 2 :(得分:1)

您可以使用preferredContentSize属性

而不是子类
SLDataFormat_PCM format_pcm = {SL_DATAFORMAT_PCM, 1, SL_SAMPLINGRATE_8,
                                   SL_PCMSAMPLEFORMAT_FIXED_16, SL_PCMSAMPLEFORMAT_FIXED_16,
                                   SL_SPEAKER_FRONT_CENTER, SL_BYTEORDER_LITTLEENDIAN};