问题是导航栏的图像位于状态栏下方。
我以前的工作是通过在导航栏中添加一个子视图,但当我只想要一个图像时这样做似乎很蠢。
我将UINavigationController
子类化为我提供此行为。通过阅读文档,UIBarPositioning.TopAttached
枚举应该允许这样做。代码如下。
import UIKit
class NavigationViewController: UINavigationController, UINavigationBarDelegate {
let gradientLayer = CAGradientLayer()
override func viewDidLoad() {
super.viewDidLoad()
navigationBar.delegate = self
navigationBar.translucent = false
gradientLayer.frame = CGRect(x: 0.0, y: 0.0,
width: navigationBar.bounds.width,
height: navigationBar.bounds.height)
gradientLayer.applyGradient(colours: [UIColor(named: .primaryBrand), UIColor(named: .secondaryBrand)])
navigationBar.setBackgroundImage(gradientLayer.renderAsImage(),
forBarPosition: .TopAttached,
barMetrics: .Default)
}
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return .LightContent
}
func positionForBar(bar: UIBarPositioning) -> UIBarPosition {
return .TopAttached
}
}
感谢您的帮助。