导航栏在自定义放松Segue期间是黑色的

我做了一个自定义的UIStoryboardSegue但是当它解开时,它似乎导致我的UINavigationBar变黑,然后回到正确的颜色。 请参阅下面的GIF。

在这里输入图像描述

我的自定义segue只是使新的ViewController从顶部下来,并退回顶部。

这里是UIStoryboardSegue代码:

import UIKit

class SlideDownSegue: UIStoryboardSegue {

var duration: Double = 0.5

override func perform() {

    let screenHeight = UIScreen.main.bounds.size.height
    let toVC = self.destination
    let fromVC = self.source

    toVC.view.transform = CGAffineTransform(translationX: 0, y: -screenHeight)
    UIApplication.shared.keyWindow?.insertSubview(toVC.view, aboveSubview: fromVC.view)

    UIView.animate(withDuration: duration, delay: 0, options: UIViewAnimationOptions.curveEaseInOut, animations: {
        toVC.view.transform = CGAffineTransform.identity
    }, completion: {
        success in
        fromVC.present(toVC, animated: false, completion: nil)
    })
}
}

class UnwindSlideDownSegue: UIStoryboardSegue {

override func perform() {

    let screenHeight = UIScreen.main.bounds.size.height
    let toVC = self.destination
    let fromVC = self.source.parent!

    fromVC.view.superview?.insertSubview(toVC.view, at: 0)

    UIView.animate(withDuration: 0.5, delay: 0, options: UIViewAnimationOptions.curveEaseInOut, animations: {
        fromVC.view.transform = CGAffineTransform(translationX: 0, y: -screenHeight - 100)
    }, completion: {
        success in
        fromVC.dismiss(animated: false, completion: nil)
    })
}
}

如果我让放松功能通过转到屏幕底部来执行默认设置,但保留用于显示新视图的自定义, UINavigationBar保持它的正确颜色,只有当我使用代码提供的放松功能时,在动画过程中, UINavigationBar会变黑。

任何提示将不胜感激。

--- 编辑 ---

我玩了一下,如果我进入AppDelegate并将UINavigationBar.appearance().isTranslucent = false更改为true,我会得到一个白色背景,但是看起来导航栏突然出现。 我想知道是否由于某种原因被卸载,然后在视图控制器处于活动状态时重新加载回来。

--- 编辑2 ---

我可以用黑客修复它。 在func application(... didFinishLaunchingWithOptions ...)AppDelegate func application(... didFinishLaunchingWithOptions ...)我添加了self.window?.backgroundColor = UIColor.{your color}但所做的只是让黑色部分现在显示为我的颜色,导航栏仍然是由于某种原因,在赛季中消失。


这是使用snapshotView(afterScreenUpdates:)的绝佳机会。 这就是UIKit执行许多库存转换(即使在UINavigationController )的方式,这是执行自定义转换的一种巨大方式,特别是在您想要应用效果时。 拍摄目的地的快照(将有一个完整的导航栏),将其插入到源的下方,执行动画,关闭源以便目的地准备就绪,最后删除您甚至不会注意到的快照,因为它将精确地反映目的地。


如果你想要一个简单的技巧,尽量背景色设置为windowAppDelegatedidFinishLaunchingWithOptions到您的导航栏的颜色,它为我工作:)这样的window?.backgroundColor = myColor

链接地址: http://www.djcxy.com/p/41063.html

上一篇: Navigation Bar is Black during Custom Unwind Segue

下一篇: FB sharing opens safari dialog box for login