当 table 视图在 swift 中滚动时,导航栏背景颜色会变成错误的颜色 4

navigation bar back ground color will change into wrong color when table view scrolls in swift 4

我在你的管子上看过这个视频 https://www.youtube.com/watch?v=rNy6aQQYbuY 但问题是导航栏颜色不会将颜色更改为我想要的正确颜色

所以这是代码

override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationController?.navigationBar.isTranslucent = true
    self.navigationController?.navigationBar.tintColor = .white
    if #available(iOS 11.0, *) {
        self.profileTV.contentInsetAdjustmentBehavior = .never
    } else {
        automaticallyAdjustsScrollViewInsets = false
    }
    self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)

    self.navigationController?.navigationBar.shadowImage = UIImage()
}

func scrollViewDidScroll(_ scrollView: UIScrollView) {
     print(scrollView.contentOffset.y)
    var offset = scrollView.contentOffset.y / 150
    if offset > 1 {
        offset = 1
        let color = UIColor(red: 181, green: 40, blue: 56, alpha: offset)
        self.navigationController?.navigationBar.backgroundColor = color
        UIApplication.shared.statusBarView?.backgroundColor = color
    } else {
        let color = UIColor(red: 181, green: 40, blue: 56, alpha: offset)
        self.navigationController?.navigationBar.backgroundColor = color
        UIApplication.shared.statusBarView?.backgroundColor = color
    }
}


extension UIApplication {
  var statusBarView: UIView? {
      return value(forKey: "statusBar") as? UIView
  }
}

滚动后的颜色是白色的但是我想成为我在代码中写的颜色代码

将此扩展放在任何你想要的地方:

public extension UIImage {
    convenience init(withBackground color: UIColor) {

        let rect: CGRect = CGRect(x: 0, y: 0, width: 1, height: 1)
        UIGraphicsBeginImageContext(rect.size);
        let context:CGContext = UIGraphicsGetCurrentContext()!;
        context.setFillColor(color.cgColor);
        context.fill(rect)

        let image:UIImage = UIGraphicsGetImageFromCurrentImageContext()!
        UIGraphicsEndImageContext()

        self.init(ciImage: CIImage(image: image)!)
    }
}

它使用 UIColor 生成 UIImage。更改颜色 alpha 并将其设置为您的 navigationBar's backGroundImage。以下是如何使用它的示例:

  func scrollViewDidScroll(_ scrollView: UIScrollView) {
    DispatchQueue.main.async {
        var offset = scrollView.contentOffset.y
            self.navigationController?.navigationBar.setBackgroundImage(UIImage(withBackground: UIColor.init(red: 0, green: 0, blue: 0, alpha: offset * 0.1)), for: .default)
    }
}

将您的代码更改为:

func setNavigation() {
    if #available(iOS 11.0, *) {
        self.tV.contentInsetAdjustmentBehavior = .never
    } else {
        automaticallyAdjustsScrollViewInsets = false
    }
    self.navigationController?.navigationBar.tintColor = .red
    self.navigationController?.navigationBar.isTranslucent = true


    self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)

    self.navigationController?.navigationBar.shadowImage = UIImage()

}


func scrollViewDidScroll(_ scrollView: UIScrollView) {

    var offset = scrollView.contentOffset.y / 1500


    if offset >= 1 {
        offset = 1
        self.navigationController?.navigationBar.backgroundColor = UIColor.white.withAlphaComponent(offset)
      //  self.navigationController?.navigationBar.alpha = offset
      //  print(offset - 0.399)
        UIApplication.shared.statusBarView?.backgroundColor = UIColor.red.withAlphaComponent(offset)
    } else {
        self.navigationController?.navigationBar.backgroundColor = UIColor.white.withAlphaComponent(offset)
        UIApplication.shared.statusBarView?.backgroundColor = UIColor.red.withAlphaComponent(offset)
    }
}
let appearance = UINavigationBarAppearance()
appearance.backgroundColor = UIColor(named: "BackgroundColor")
appearance.titleTextAttributes = [.foregroundColor: UIColor(named: "TextColor") ?? .white]
      
self.navigationController?.navigationBar.scrollEdgeAppearance = appearance
self.navigationController?.navigationBar.standardAppearance = appearance