2017-06-05 218 views
0

我有两个控制器之间的自定义转换工作接近iOS邮件应用程序,哪一个停留在另一个顶部与一些实施的滚动行为。iOS - 呈现视图控制器从一个呈现的视图控制器更改其高度

如果我从呈现视图控制器呈现一个新的视图控制器,它不是全屏大小,然后我忽略这个新呈现的视图控制器,则先前呈现的视图控制器更改其高度,然后调整其自身大小。

我知道这可能有点混乱,但请查看下面的gif示例。

example

正如你可以看到,如果我提出这个自定义图像拾取器,然后关闭它,其中提出它翘曲到全屏,然后调整大小,以初始值的视图控制器。

我该如何防止这种情况发生?我希望呈现图像选择器的ViewController保持其高度。

解雇后,您可以看到调整大小发生。

设置呈现视图控制器尺寸

因为它是一个UIViewControllerAnimatedTransitioning我创建一个自定义演示文稿和它的设置大小有它自己的identity

class CustomPresentationController: UIPresentationController { 

    override init(presentedViewController: UIViewController, presenting presentingViewController: UIViewController!) { 
     super.init(presentedViewController: presentedViewController, presenting: presentingViewController) 
    } 

    override var frameOfPresentedViewInContainerView: CGRect { 
     let containerBounds = self.containerView?.bounds 
     let origin = CGPoint(x: 0.0, y: ((containerBounds?.size.height)! * 0.05)) 
     let size = CGSize(width: (containerBounds?.size.width)! , height: ((containerBounds?.size.height)! * 0.95)) 
     // Applies the attributes 
     let presentedViewFrame: CGRect = CGRect(origin: origin, size: size) 
     return presentedViewFrame 
    } 

    override func containerViewWillLayoutSubviews() { 
     presentedView?.frame = frameOfPresentedViewInContainerView 
    } 
} 

任何提示? 谢谢

+0

尝试self.automaticallyAdjustsScrollViewInsets = NO – karthikeyan

+0

里面很好的例子图像选择器类还是在我称之为演示文稿的类中? –

+0

你可以添加一些代码,它显示了你是如何设置呈现图像选择器的VC的大小。 –

回答

0

我认为这是问题所在。您正在强制未完成的框架大小。你应该使用类似preferredContentSize的东西。

您可以简单地将此添加到您的CustomPresentationControllerviewDidLoad

另外,您也可以尝试modalPresentationStyle为“在当代语境中”

您可以参考的,你如何保持VC的某些部分为透明here

+0

我会试试你说的方式。如果它不能工作,我会@你的一些提示;)谢谢你 –

+0

它没有按预期工作。我尝试将'preferredContentSize'应用到我想要的大小,如果向右移除了它被剪切到左上角的原点,所以它在底部有一个空的黑条。 我仍然需要实现'frameOfPresentedViewContainerView',所以我可以将它的原点设置为左下角。 我想创建一个类似于iOS的mail.app,当你创建一个新的电子邮件,动画本身的手势。 –

+0

我很抱歉,但我相信你对解决方案的态度有点不对。该视图将在添加和删除任何视图控制器后调整大小。对于空黑条,你确定你正在使用“Over Current Context”吗? –