ios - 如何使用 iOS 11 和 prefersLargeTitles 为 UINavigationBar 设置背景渐变?

标签 ios swift

在 iOS 10 中,我可以这样做来制作背景渐变:

let gradientColor = UIColor.gradientWithFrame(frame: navigationBar.bounds, colors: [.red, .blue])
navigationBar.barTintColor = gradientColor

现在,navigationBar.bounds 在没有大标题时返回 UINavigationBar 的大小。这在这张屏幕截图中很明显,渐变重复:

enter image description here

您可以看到渐变开始重复,因为 navigationBar.size 返回的大小不正确。

还有其他方法可以在 UINavigationBar 上设置渐变吗?

最佳答案

试试这个:

    let gradientLayer = CAGradientLayer()
    var updatedFrame = self.navigationController!.navigationBar.bounds
    updatedFrame.size.height += view.window?.windowScene?.statusBarManager?.statusBarFrame.height ?? 0
    gradientLayer.frame = updatedFrame
    gradientLayer.colors = [UIColor.red.cgColor, UIColor.blue.cgColor]
    gradientLayer.startPoint = CGPoint(x: 0.0, y: 0.0)
    gradientLayer.endPoint = CGPoint(x: 1.0, y: 0.0)
    UIGraphicsBeginImageContext(gradientLayer.bounds.size)
    gradientLayer.render(in: UIGraphicsGetCurrentContext()!)
    let image = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    self.navigationController!.navigationBar.setBackgroundImage(image, for: UIBarMetrics.default)

    let appearance = navigationController!.navigationBar.standardAppearance.copy()
    appearance.backgroundImage = image
    navigationController?.navigationBar.standardAppearance = appearance
    navigationController?.navigationBar.scrollEdgeAppearance = appearance  

关于ios - 如何使用 iOS 11 和 prefersLargeTitles 为 UINavigationBar 设置背景渐变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48029404/

相关文章:

ios - Whatsapp 没有从 UIActivityViewController 中的 assetURL 中选择视频

ios - 为什么当我更改边界时 View 没有变化?

objective-c - 从 iOS 中的数据数组创建 csv 文件

iphone - UIWebView 没有使用 ARC 释放所有事件字节

ios - 带有子 ViewController 的 UIPageViewController

ios - 自定义 UIButton setSelected 奇怪的行为

swift - 通用方法导致 "cannot pass immutable value of type AnyObject? as inout argument"

ios - 由于其对关系和继承的不同看法,我很难根据我的类图设计适当的核心数据布局

android - 在无状态小部件中使用 TextFormField 在 flutter 中非常困难

swift - VNRecognizeTextRequest 无法识别横向模式下扫描的文本