【问题标题】:Black screen is coming below the presented view controller黑屏出现在呈现的视图控制器下方
【发布时间】:2018-09-15 14:55:51
【问题描述】:

我正在尝试以模态方式呈现视图控制器。它就像一个弹出视图控制器。

我正在使用 animateTransition 方法为过渡设置动画。 这是我的代码:

extension PopUpViewController: UIViewControllerTransitioningDelegate, UIViewControllerAnimatedTransitioning {

    func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
        return 0.25
    }

    func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {

        guard let fromVC = transitionContext.viewController(forKey: .from) else { return}
        guard let toVC = transitionContext.viewController(forKey: .to) else { return}
        guard let fromView = transitionContext.view(forKey: .from) else { return}
        guard let toView = transitionContext.view(forKey: .to) else { return}

        var containerView = transitionContext.containerView

        if toVC == self {
            // presenting
            containerView.addSubview(toView)
            toView.frame = fromView.frame
            popUpView.transform = CGAffineTransform(scaleX: 0.5, y: 0.5)
            toView.alpha = 0
            UIView.animate(withDuration: 0.25, animations: {
                toView.alpha = 1
                self.popUpView.transform = CGAffineTransform.identity
            }) { _ in

                DispatchQueue.main.async {
                    transitionContext.completeTransition(true)
                }
            }
        } else {
            // dismissing
            UIView.animate(withDuration: 0.25, animations: {
                self.popUpView.transform = CGAffineTransform(scaleX: 0.5, y: 0.5)
                fromView.alpha = 0
            }) { _ in
                transitionContext.completeTransition(true)
            }
        }
    }

    func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? {
        return self
    }

    func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {
        return self
    }
}

我以这种方式将这个视图控制器(Presented VC)呈现在另一个视图控制器(Presenting VC)之上。 我正在使用默认的模态演示样式。 最初我使用的是自定义,但我查看了 StackOverflow 上的一些帖子,他们说要删除它,但我仍然出现黑屏(呈现 VC),我可以在上面看到呈现的 VC。

当我关闭呈现的 VC 时,呈现的 VC 再次可见。

如果您需要更多详细信息,请告诉我。

根据代码执行transitionContext.completeTransition(true)时,VC屏幕变黑

【问题讨论】:

标签: ios iphone swift delegates


【解决方案1】:

您可以尝试将弹出视图控制器的 modalPresentationStyle 设置为 .overCurrentContext.overFullScreen

case overCurrentContext:

一种将内容显示在另一个视图控制器的内容之上的呈现方式。

这意味着它将在 viewController 的内容上呈现下一个 viewController。

所以对于 Container ViewControllers:

因此,如果您有任何tabBarControllertabBar 将允许用户与之交互。

全屏显示

呈现的视图覆盖屏幕的视图呈现样式。

这意味着它将在全屏上显示下一个 viewController,因此 taBar 在演示完成之前不会是交互式的。

func presentNextController() {
    // In case your viewController is in storyboard or any other initialisation
    guard let nextVC = storyboard.instantiateViewController(with: "nextVC") as? NextViewController else { return }

    nextVC.modalPresentationStyle = .overFullScreen
    // set your custom transitioning delegate

    self.present(nextVC, animated: true, completion: nil)
}

【讨论】:

    【解决方案2】:

    你需要设置你的新视图控制器的

    modalPresentationStyle = .overCurrentContext
    

    在初始化视图控制器时或在情节提要中执行此操作。

    【讨论】:

    • 我尝试在 PopUpViewController 的 viewdidload 中添加 modalPresentationStyle = .overCurrentContext,但是当呈现 PopUpViewController 时,呈现的 VC 仍然变黑
    • 不要添加到viewDidLoad。在初始化视图控制器时或在故事板中设置它。
    • 现在 animateTransition 没有被调用。我呈现的方式发生了变化。代码现在不用了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-08
    • 1970-01-01
    • 2022-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多