1

问题是导航栏的图像位于状态栏下方。

导航栏位于状态栏下方

我以前通过向导航栏添加子视图来实现这一点,但是当我只想要一个图像时这样做似乎很愚蠢。

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
    }
}

谢谢您的帮助。

4

0 回答 0