【问题标题】:iOS - Presenting a view controller from a presented view controller changes its heightiOS - 从呈现的视图控制器呈现视图控制器会改变其高度
【发布时间】:2017-06-05 11:31:02
【问题描述】:

我在两个与 iOS 邮件应用程序接近的控制器之间进行了自定义转换,其中一个通过一些实现的滚动行为保持在另一个之上。

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

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

有什么提示吗? 谢谢

【问题讨论】:

  • 试试 self.automaticallyAdjustsScrollViewInsets = NO
  • 在图像选择器类中还是在我调用演示文稿的类中?
  • 你能添加一些代码来显示你是如何设置呈现图像选择器的 VC 的大小的吗?
  • @karthikeyan 没用
  • @GaneshSomani 是的,我会添加一些代码

标签: ios swift3 presentviewcontroller


【解决方案1】:

我认为这就是问题所在。您正在强制无法解决的帧大小。你应该使用preferredContentSize之类的东西。

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

或者,您也可以尝试将modalPresentationStyle 用作“Over Current Context”

你可以参考一些很好的例子来说明如何让 VC 的某些部分保持透明here

【讨论】:

  • 我会按照你说的方法试一试。如果它不工作,我会@你一些提示;)谢谢你
  • 它没有按预期工作。我尝试将preferedContentSize 应用到我想要的大小,如果是正确的,除了它被剪裁到左上角的原点,所以它在底部有一个空的黑条。我仍然需要以某种方式实现frameOfPresentedViewContainerView,以便我可以将其原点设置在左下角。当您创建新电子邮件时,我正在尝试创建类似于 iOS mail.app 的东西,动画本身带有手势。
  • 很抱歉,但我相信您解决问题的方法有点错误。视图将在添加和删除任何视图控制器后调整大小。同样对于空的黑条,您确定您使用的是“Over Current Context”吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-03
  • 2015-07-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多