iOS - 从呈现的视图控制器呈现视图控制器会更改其高度

时间:2017-06-05 11:31:03

标签: ios swift3 presentviewcontroller

我在两个控制器之间进行了自定义转换,这个控制器在iOS邮件应用程序附近工作,其中一个控制器保持在另一个控制器之上,并带有一些实现的滚动行为。

如果我从Presented视图控制器中呈现一个不是全屏大小的新视图控制器,然后我关闭这个新呈现的视图控制器,则先前呈现的视图控制器会更改其高度,然后自行调整大小。

我知道这可能有点令人困惑,但请查看下面的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
    }
}

任何提示? 感谢

1 个答案:

答案 0 :(得分:0)

我认为这就是问题所在。您正在强制无法正常工作的帧大小。您应该使用类似preferredContentSize的内容。

您只需将其添加到viewDidLoad的{​​{1}}。

即可

或者,您也可以尝试CustomPresentationController作为"过度上下文"

您可以参考非常好的示例,了解如何将VC的某些部分保持为透明here