Внешний вид панели навигации альфа-компонента barTintColor

Я пытаюсь добавить прозрачности в мой NavigationBar без успеха. В моем AppDelegate'sdidFinishLaunchingWithOptionsУ меня есть следующие строки кода:

let navigationBarAppearance = UINavigationBar.appearance()
navigationBarAppearance.barTintColor = UIColor.blueColor().colorWithAlphaComponent(0.2)
navigationBarAppearance.translucent = true

Но неважно, что такое альфа-компонент, прозрачность не меняется. Я даже пытался использовать цвет UIImage:

let colorImage = UIImage.imageFromColor(UIColor.blueColor().colorWithAlphaComponent(0.2), frame: CGRect(x: 0, y: 0, width: 340, height: 64))
navigationBarAppearance.setBackgroundImage(colorImage, forBarMetrics: .Default)

Этот метод также не меняет прозрачность панели навигации. В контроллере представления я попытался:

self.navigationController?.navigationBar.tintColor = UIColor.blueColor()
self.navigationController?.navigationBar.alpha = 0.2
self.navigationController?.navigationBar.translucent = true

И до сих пор не повезло. Может кто-нибудь помочь мне понять, как я могу добавить прозрачность на панель навигации?

2 ответа

Вот, пожалуйста, мужик. Просто следуйте этим шагам

Сначала сделайте расширение класса. Добавьте только новый пустой файл swift и назовите его как UIImageExtension или как вам нравится

Напишите следующий код в этом расширении

import Foundation
import UIKit
extension UIImage{
    static func imageFromColor(color: UIColor) -> UIImage {
    let rect = CGRectMake(0, 0, 1, 1)

    // create a 1 by 1 pixel context
    UIGraphicsBeginImageContextWithOptions(rect.size, false, 0)
    color.setFill()
    UIRectFill(rect)

    let image = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return image

    }
}

Теперь перейдите к вашему классу ViewController и напишите следующий код и поиграйте с альфа. Это оно.

let image = UIImage.imageFromColor(UIColor(red: 0.071, green: 0.071, blue: 0.922, alpha: 0.2))
self.navigationController?.navigationBar.setBackgroundImage(image, forBarMetrics: UIBarMetrics.Default)
self.navigationController?.navigationBar.barStyle = .Default

Для Swift 3.0

import Foundation
import Foundation
import UIKit
extension UIImage{
    static func imageFromColor(color: UIColor) -> UIImage {
        let rect = CGRect(x: 0, y: 0, width: 1, height: 1)

        // create a 1 by 1 pixel context
        UIGraphicsBeginImageContextWithOptions(rect.size, false, 0)
        color.setFill()
        UIRectFill(rect)

        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return image!

    }
}

ИСПОЛЬЗОВАНИЕ

let image = UIImage.imageFromColor(color: UIColor(red: 0.071, green: 0.071, blue: 0.922, alpha: 0.2))
self.navigationController?.navigationBar.setBackgroundImage(image, for: UIBarMetrics.default)
self.navigationController?.navigationBar.barStyle = .default

Я также сделал образец. Посмотри. Образец в версии Swift 2.x
https://github.com/RajanMaheshwari/TransparentNav
Надеюсь, поможет!

РЕДАКТИРОВАТЬ: просто изменил панель навигации на полупрозрачный, и это сработало

Скриншот

В последнем примере вы изменили tintColor, а не barTintColor. В любом случае, эти три строки должны работать:

self.navigationController?.navigationBar.barTintColor = UIColor.greenColor()
self.navigationController?.navigationBar.alpha = 0.2
self.navigationController?.navigationBar.translucent = true

Но помните, что это изменит планку для всего контроллера навигации, поэтому вы должны подумать об этом, возвращаясь с этого контроллера представления.

Другие вопросы по тегам