在 iOS 10 中,我可以这样做来制作背景渐变:
let gradientColor = UIColor.gradientWithFrame(frame: navigationBar.bounds, colors: [.red, .blue])
navigationBar.barTintColor = gradientColor
现在,navigationBar.bounds
在没有大标题时返回 UINavigationBar
的大小。这在这张屏幕截图中很明显,渐变重复:
您可以看到渐变开始重复,因为 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/