Ios iphone 12 mini的导航栏背景图像颜色不正确

Ios iphone 12 mini的导航栏背景图像颜色不正确,ios,swift,xcode,navigationbar,Ios,Swift,Xcode,Navigationbar,我正在将导航栏的图像设置为渐变。除了iPhone12 mini之外,这在所有型号上都能完美工作 我已尝试在ViewWillDisplay、ViewDidDisplay和ViewDidLoad中的主视图控制器上调用此函数 这是所有其他型号上的外观 func setNavGradiant(){ guard let navigationController=self.navigationController else{print(“❇️♊️>>>\(#file)\(#line):guard let

我正在将导航栏的图像设置为渐变。除了iPhone12 mini之外,这在所有型号上都能完美工作

我已尝试在ViewWillDisplay、ViewDidDisplay和ViewDidLoad中的主视图控制器上调用此函数

这是所有其他型号上的外观

func setNavGradiant(){

guard let navigationController=self.navigationController else{print(“❇️♊️>>>\(#file)\(#line):guard let failed通过子类化
UINavigationController,您可能会获得更好的结果:

class MyNavigationController: UINavigationController {

    let gradient = CAGradientLayer()

    override func viewDidLoad() {
        super.viewDidLoad()
    
        gradient.frame = navigationBar.bounds
        
        gradient.colors = [ #colorLiteral(red: 0.4392156899, green: 0.01176470611, blue: 0.1921568662, alpha: 1).cgColor,  #colorLiteral(red: 0.2196078449, green: 0.007843137719, blue: 0.8549019694, alpha: 1).cgColor] // start color and end color
        gradient.startPoint = CGPoint(x: 0.5, y: 0.0) // vertical gradient start
        gradient.endPoint = CGPoint(x: 0.5, y: 1.0)
        
        if let image = getImageFrom(gradientLayer: gradient) {
            navigationBar.setBackgroundImage(image, for: UIBarMetrics.default)
        }

    }

    func getImageFrom(gradientLayer:CAGradientLayer) -> UIImage? {
        var gradientImage:UIImage?
        UIGraphicsBeginImageContext(gradientLayer.frame.size)
        if let context = UIGraphicsGetCurrentContext() {
            gradientLayer.render(in: context)
            gradientImage = UIGraphicsGetImageFromCurrentImageContext()?.resizableImage(withCapInsets: UIEdgeInsets.zero, resizingMode: .stretch)
        }
        UIGraphicsEndImageContext()
        return gradientImage
    }

}
请尝试拨打:

DispatchQueue.main.async {
            self.setNeedsStatusBarAppearanceUpdate()
        }

安装完成后。应该可以在不分派到主线程的情况下工作,但我以前发现了从生命周期方法调用的内容不在主线程上的问题。因此,另一件要检查的事情是确保您正在主线程上运行更新。

您在何时何地调用此功能?我刚刚编辑了解释此功能的位置…我试过ViewWillDisplay、ViewDidDisplay和ViewDidLoad。效果很好,谢谢!
DispatchQueue.main.async {
            self.setNeedsStatusBarAppearanceUpdate()
        }