【问题标题】:Navigation Bar will not become transparent导航栏不会变得透明
【发布时间】:2024-01-10 21:11:01
【问题描述】:

我需要导航栏变得透明。这是我在ViewController 中输入的内容:

class ViewController: UIViewController {

  @IBOutlet weak var navbar: UINavigationBar!

  override func viewDidLoad() {
    super.viewDidLoad()
    navbar.isTranslucent=true
    navbar.shadowImage = UIImage()
    navbar.backgroundColor = UIColor.clear
  } 

根据调试视图层次结构UIVisualEffectBackdropViewUIVisualEffectSubviewUIVisualEffectSubview(是的,其中两个)阻止它变得透明。 Ps:我没有使用导航控制器。

我该如何解决?

【问题讨论】:

    标签: swift uikit uinavigationbar


    【解决方案1】:

    如果您使用最新的 beta iOS 13.4 和 XCode 11.4 构建,xmhafiz 答案将不再有效。 我找到了另一种方法,可能只是测试版软件的一个错误,但我把它写在那里,以防万一

    import UIKit
    
    class TransparentNavBar :UINavigationBar {
        override func awakeFromNib() {
            super.awakeFromNib()
            self.setBackgroundImage(UIImage(), for: .default)
            self.shadowImage = UIImage()
            self.isTranslucent = true
            self.backgroundColor = .clear
            if #available(iOS 13.0, *) {
                self.standardAppearance.backgroundColor = .clear
                self.standardAppearance.backgroundEffect = .none
                self.standardAppearance.shadowColor = .clear
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      这三行应该足以让您的UINavigationBar 透明。

      override func viewDidLoad() {
          super.viewDidLoad()
          // make transparent the navbar
          navbar.setBackgroundImage(UIImage(), for: .default)
          navbar.shadowImage = UIImage()
          navbar.isTranslucent = true
      }
      

      【讨论】:

      • 我刚回来删除答案,因为我想出来了 - 与您的建议完全相同。我会接受答案。
      • 谢谢。为我工作。我使用的是导航控制器,所以只是你的“导航栏”使用了“navigationController?.navigationBar”