在UINavigationBar上设置图像会显示黑色状态栏

时间:2016-07-15 10:26:44

标签: ios swift uinavigationbar cagradientlayer uibarmetrics

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

Navigation bar sits below status bar

我以前的工作是通过在导航栏中添加一个子视图,但当我只想要一个图像时这样做似乎很蠢。

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

感谢您的帮助。

0 个答案:

没有答案