ios - 在 iOS 11 Swift 4 上应用渐变后,UINavigationBar 标题和按钮消失

标签 ios swift xcode ios10 ios11

我最近升级到带有 Swift 4 的 Xcode 9,这反过来又更新了所有 iOS 模拟器。 自更新以来,我发现在对 UINavigationBar 应用渐变后;标题和按钮没有出现,但仍然有功能。

这是应用渐变的代码 -

extension UIView {

    func applyNavGradient(colours: [UIColor]) -> Void {
       self.applyNavGradient(colours: colours, locations: nil)
    }

    func applyNavGradient(colours: [UIColor], locations: [NSNumber]?) -> Void {
       let gradient: CAGradientLayer = CAGradientLayer()
       gradient.frame = self.bounds
       gradient.colors = colours.map { $0.cgColor }
       gradient.locations = locations
       self.layer.addSublayer(gradient)
       self.backgroundColor = UIColor.clear
    } 
}

class ViewController {

        override func viewDidLoad() {
            UINavigationBar.applyNavGradient(colours: redFade)
        }

这曾经在带有 iOS10 的 Xcode 8 中工作 -

Before iOS 9

现在我得到的就是这个;

With iOS 9

谁能告诉我为什么会发生变化?

提前致谢!

克里斯。

最佳答案

您可以使用UIColor.init(patternImage image: UIImage)方法来为navigationBar分配barTintColor

这里是示例代码

func applyNavGradient(colours: [UIColor]) -> UIImage? {

    let gradientLayer: CAGradientLayer = CAGradientLayer()
    gradientLayer.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: navigationController!.navigationBar.frame.size.height + navigationController!.navigationBar.frame.origin.y)
    gradientLayer.colors = colours.map { $0.cgColor }
    gradientLayer.startPoint = CGPoint(x: 0.5, y: 0.0)
    gradientLayer.endPoint = CGPoint(x: 0.5, y: 1.0)

    UIGraphicsBeginImageContext(gradientLayer.bounds.size)
    gradientLayer.render(in: UIGraphicsGetCurrentContext()!)
    let image = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return image

}

之后就可以这样调用来设置渐变了

if let img = applyNavGradient(colours: [UIColor.red, UIColor.yellow]) {
    navigationController?.navigationBar.barTintColor = UIColor(patternImage: img)
}

关于ios - 在 iOS 11 Swift 4 上应用渐变后,UINavigationBar 标题和按钮消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46969129/

相关文章:

iphone - 有没有办法为 NSObjects 设置变量而不为每个变量创建属性?

ios - 为什么我在正确的时区得到错误的时间输出?

iphone - Ntimer 计数错误

ios - 可区分的 Collection View 如何在多个部分显示相同的项目?

ios - UIViewController 中的 socket 在 viewdidload 中为零

objective-c - 如何向 Objective-C 项目批量添加 2 个字母的前缀/命名空间?

objective-c - Xcode 中的(命名)关键字是什么?

ios - 我想将 String 转换为 UIColor

swift - 将数据从 NSViewController 传递到 NSSplitViewController 中的另一个 NSViewController?

.net - XCode/MonoMac 中的自定义控件等效项