How can I create a horizontal gradient background for my iOS nav bar?

前端 未结 4 533
难免孤独
难免孤独 2021-01-31 10:44

I know how to set a navigation bar background color (with barTintColor), but now I am working on an iOS app that calls for a horizontal gradient (not the typical vertical gradie

相关标签:
4条回答
  • 2021-01-31 11:23

    You can use that :

    [[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"gardientImage"] forBarMetrics:UIBarMetricsDefault];
    

    for ios 7 navigation bar height is 64px

    0 讨论(0)
  • 2021-01-31 11:25

    Updated @JulianM answer for iOS 10 / swift 3.0:

    let gradientLayer = CAGradientLayer()
    var updatedFrame = self.navigationController!.navigationBar.bounds
    updatedFrame.size.height += 20
    gradientLayer.frame = updatedFrame
    gradientLayer.colors = [UIColor.green.cgColor, UIColor.blue.cgColor]
    gradientLayer.startPoint = CGPoint(x: 0.0, y: 0.5)
    gradientLayer.endPoint = CGPoint(x: 1.0, y: 0.5)
    
    UIGraphicsBeginImageContext(gradientLayer.bounds.size)
    gradientLayer.render(in: UIGraphicsGetCurrentContext()!)
    let image = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    
    self.navigationController!.navigationBar.setBackgroundImage(image, for: UIBarMetrics.default)
    
    0 讨论(0)
  • 2021-01-31 11:33

    If you want to programmatically set the gradient of a given UINavigationBar I have a solution for you.

    First setup a CAGradientLayer with your desired colors and locations.

    CAGradientLayer *gradientLayer = [CAGradientLayer layer];
    gradientLayer.frame = navigationBar.bounds;
    gradientLayer.colors = @[ (__bridge id)[UIColor greenColor].CGColor,
                              (__bridge id)[UIColor blueColor].CGColor ];
    gradientLayer.startPoint = CGPointMake(0.0, 0.5);
    gradientLayer.endPoint = CGPointMake(1.0, 0.5);
    

    Then grab the UImage for that layer.

    UIGraphicsBeginImageContext(gradientLayer.bounds.size);
    [gradientLayer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *gradientImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    

    Set the gradientImage as the backgroundImage for your UINavigationBar.

    [navigationBar setBackgroundImage:gradientImage forBarMetrics:UIBarMetricsDefault];
    

    Swift Solution:

    [![// Setup the gradient
    let gradientLayer = CAGradientLayer()
    gradientLayer.frame = navigationBar.bounds
    gradientLayer.colors = [UIColor.green.cgColor, UIColor.blue.cgColor]
    gradientLayer.startPoint = CGPoint(x: 0.0, y: 0.5)
    gradientLayer.endPoint = CGPoint(x: 1.0, y: 0.5)
    
    // Render the gradient to UIImage
    UIGraphicsBeginImageContext(gradientLayer.bounds.size)
    gradientLayer.render(in: UIGraphicsGetCurrentContext()!)
    let image = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    
     Set the UIImage as background property
    navigationBar.setBackgroundImage(image, for: UIBarMetrics.default)
    

    0 讨论(0)
  • 2021-01-31 11:33

    Swift

    Add this function in global class

    func setHorizontalGradientColor(view: UIView) {
        let gradientLayer = CAGradientLayer()
        var updatedFrame = view.bounds
        updatedFrame.size.height += 20
        gradientLayer.frame = updatedFrame
        gradientLayer.colors = [UIColor.black.cgColor, UIColor.blue.cgColor]
        gradientLayer.startPoint = CGPoint(x: 0.0, y: 0.5)
        gradientLayer.endPoint = CGPoint(x: 1.0, y: 0.5)
        view.layer.insertSublayer(gradientLayer, at: 0)
    }
    

    Use in anywhere:

    setHorizontalGradientColor(view: self.bgView)
    
    0 讨论(0)
提交回复
热议问题