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



在ios 7及以前的版本中,我更新了presentadViewController.view.superview的边界,以自定义presentated视图控制器的大小,但在ios 8中似乎不再是这样了。由于没有超级视图,因此可以在视图控制器上设置(当您尝试在调试器中调用它时,返回nil)。

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

我想下面的操作更容易,而且它在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];

如果以后有人遇到这个问题,下面是我的解决方法。

子类UIPresentationContainer并返回frameOfPresentedViewInContainerView中的帧。将其输入到您为presentedViewController创建的transitioningDelegate中。

或者,您可以在animateTransition:中设置presentView的最终帧,该帧属于您为transitioningDelegate创建的动画师对象。然而,这是旧的iOS 7方式。由于苹果推出了UIPresentationControlroller,任何大小/框架的更改都应该在那里进行,这是我之前提到的方法。

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

对于那些从未接触过apple视图控制器转换api的人,就像我以前一样,以下是步骤。

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

  2. 创建YourTransitionAnimationr,它符合UIViewControllerAnimatedTransitioning。这里,需要重写两个函数,transitionDuration和animateTransition(这是所有动画发生的地方,添加/删除演示视图并设置动画。让您在transitionContext上调用completeTransition来结束动画)。

  3. 子类UIPresentationControlroller。根据每个人的需要,你可以在这里做很多事情。我刚刚添加了一个dimmingView,并更改了presentedViewController的框架。

  4. 最后,在显示视图控制器之前挂接一些东西,视图控制器将模式PresentationStyle更改为自定义并设置转换委托。

我发现非常有用的东西,两个2014年WWDC视频("查看控制器的进步"one_answers"查看演示控制器内部")和苹果公司的示例项目(LookInside photoEditingApp)。

您可以使用preferredContentSize属性而不是子类化

- (void)viewDidLoad {
   [super viewDidLoad];
   self.preferredContentSize = CGSizeMake((self.view.frame.size.width / 100) * 65, (self.view.frame.size.height / 100) * 65);
}

相关内容

  • 没有找到相关文章