Цвет фона навигационной панели изменится на неправильный, когда таблица прокручивается в Swift 4 - PullRequest
0 голосов
/ 06 марта 2019

я видел это видео на твоей трубе 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
  }
}

цвет после прокрутки будет белым, но я хочу быть цветным кодом, который я написал в своих кодах

Ответы [ 2 ]

1 голос
/ 09 марта 2019

измените свой код на:

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 голосов
/ 06 марта 2019

Поместите это расширение в любое место:

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.измените цвет альфа и установите его как 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

...