如何在 iOS 13 中移除带有外观的导航栏背景?

Ant*_*vez 0 uinavigationbar ios swift ios13

我试图在带有 #available 的 if 语句中删除 iOS 13 中的导航栏背景。我知道在 else 语句中删除 iOS 12 和旧版 iOS 导航栏背景的原始代码。但是,Apple 确实在任何地方宣布了一个名为Appearance的新系统,以支持新的 iOS 13 系统。

    let app = UINavigationBarAppearance()

    let navigationBar = self.navigationController?.navigationBar

    app.configureWithOpaqueBackground()
    app.shadowImage = UIImage()


    self.navigationController?.navigationBar.scrollEdgeAppearance = app

    navigationBar!.standardAppearance = app
    navigationBar!.scrollEdgeAppearance = app
Run Code Online (Sandbox Code Playgroud)

我相信这个 configureWithOpaqueBackground() 允许我们删除导航栏背景,但我在 iOS 13.1 模拟器上测试出现黑色导航栏背景。我知道是什么原因造成的。

     app.configureWithOpaqueBackground()
     app.titleTextAttributes = [.foregroundColor: UIColor.white]
     app.largeTitleTextAttributes = [.foregroundColor: UIColor.white]
     app.backgroundColor = #colorLiteral(red: 0.1603881121, green: 0.1677560508, blue: 0.2133775949, alpha: 1)
Run Code Online (Sandbox Code Playgroud)

该代码允许我们将自定义颜色放在黑色背景上。我准备在 viewWillDisappear 的语句中添加该代码,以便在self.navigationController?.navigationBar.scrollEdgeAppearance = app使用 remove app.configureWithOpaqueBackground()和 之前将导航栏背景恢复为正常颜色背景app.shadowImage = UIImage()。现在,我需要在 viewWillAppear 的语句中创建半透明导航栏背景,但由于黑色背景仍然显示,它看不到任何半透明背景。

我非常感谢您帮助解决问题!:)

mat*_*att 6

如果您希望导航栏变得完全透明:

    let app = UINavigationBarAppearance()
    app.configureWithTransparentBackground()
    self.navigationController?.navigationBar.standardAppearance = app
    self.navigationController?.navigationBar.scrollEdgeAppearance = app
    self.navigationController?.navigationBar.compactAppearance = app
Run Code Online (Sandbox Code Playgroud)

不要弄乱isTranslucent导航栏的 。