我在两个控制器之间进行了自定义转换,这个控制器在iOS邮件应用程序附近工作,其中一个控制器保持在另一个控制器之上,并带有一些实现的滚动行为。
如果我从Presented视图控制器中呈现一个不是全屏大小的新视图控制器,然后我关闭这个新呈现的视图控制器,则先前呈现的视图控制器会更改其高度,然后自行调整大小。
我知道这可能有点令人困惑,但请查看下面的gif示例。
正如您所看到的,如果我提供此自定义图像选择器然后将其关闭,则呈现它的视图控制器将变为全屏,然后调整为初始值。
如何防止这种情况发生?我想要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 :(得分:0)
我认为这就是问题所在。您正在强制无法正常工作的帧大小。您应该使用类似preferredContentSize
的内容。
您只需将其添加到viewDidLoad
的{{1}}。
或者,您也可以尝试CustomPresentationController
作为"过度上下文"
您可以参考非常好的示例,了解如何将VC的某些部分保持为透明here