Animating a navigation bar color

前端 未结 1 908
心在旅途
心在旅途 2020-12-20 02:14

I am trying to animate a change of color of a navigation bar when popping back to a previous controller. To give it some context, I have controller A which is a collectionVi

1条回答
  •  感动是毒
    2020-12-20 02:55

    Details

    xCode 8.3.2, swift 3.1

    Solution

    override func viewWillAppear(_ animated: Bool) {
        if let navigationBar = self.navigationController?.navigationBar {
            navigationBar.backgroundColor = .blue
        }
    }
    

    Full sample

    ViewController

    import UIKit
    
    class ViewController: UIViewController {
    
        override func viewWillAppear(_ animated: Bool) {
            if let navigationBar = self.navigationController?.navigationBar {
                navigationBar.barTintColor = UIColor(red: 244/255, green: 67/255, blue: 54/255, alpha: 1.0)
                navigationBar.tintColor = .white
                navigationBar.titleTextAttributes = [NSForegroundColorAttributeName : UIColor.white]
                navigationBar.isTranslucent = false
            }
        }
    }
    

    ViewController2

    import UIKit
    
    class ViewController2: UIViewController {
    
        override func viewWillAppear(_ animated: Bool) {
            if let navigationBar = self.navigationController?.navigationBar {
                let color = UIColor(red: 1, green: 153/255, blue: 0, alpha: 1.0)
                navigationBar.setBackgroundImage(UIImage.imageWithColor(color: color), for: .default)
                navigationBar.shadowImage = UIImage()
                navigationBar.isTranslucent = true
            }
        }
    
        override func viewWillDisappear(_ animated: Bool) {
            if let navigationBar = self.navigationController?.navigationBar {
                navigationBar.setBackgroundImage(nil, for: .default)
                navigationBar.shadowImage = nil
                navigationBar.isTranslucent = false
            }
        }
    }
    

    extension UIImage

    import UIKit
    
    extension UIImage {
        class func imageWithColor(color: UIColor) -> UIImage {
            let rect = CGRect(x: 0, y: 0, width: 1, height: 1)
            UIGraphicsBeginImageContextWithOptions(CGSize(width: 1, height: 1), false, 0)
            color.setFill()
            UIRectFill(rect)
            let image = UIGraphicsGetImageFromCurrentImageContext()!
            UIGraphicsEndImageContext()
            return image
        }
    }
    

    Main.storyboard

    
    
        
            
        
        
            
            
            
        
        
            
            
                
                    
                        
                            
                            
                        
                        
                            
                            
                            
                                
                            
                            
                            
                                
                                
                            
                        
                        
                    
                    
                
                
            
            
            
                
                    
                        
                            
                            
                        
                        
                            
                            
                            
                        
                    
                    
                
                
            
            
            
                
                    
                        
                        
                            
                            
                        
                        
                        
                            
                        
                    
                    
                
                
            
        
    
    

    0 讨论(0)
提交回复
热议问题