当表格视图在swift 4中滚动时,导航栏背景颜色将变为错误的颜色

问题描述 投票:0回答:2

我看到你的视频管你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
  }
}

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

ios uiscrollview swift4 navigationbar uicolor
2个回答
1
投票

将您的代码更改为:

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)
    }
}

0
投票

将此扩展程序放在任何位置:

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)!)
    }
}

它使用UIImage制作UIColor。更改颜色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)
    }
}

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.