将梯度图像设置为UINavigationBar背景的问题

时间:2016-07-21 04:05:29

标签: ios swift uinavigationbar

我正在尝试为导航栏设置渐变图像背景。代码是这样的:

extension CAGradientLayer {

    class func gradientLayerForBounds(bounds: CGRect, startColor: UIColor, endColor: UIColor) -> CAGradientLayer {
        let layer = CAGradientLayer()
        layer.frame = bounds
        layer.colors = [startColor.CGColor, endColor.CGColor]
        return layer
    }
}

然后在我的视图控制器中:

func imageLayerForGradientBackground() -> UIImage{

        var updatedFrame = self.navigationController!.navigationBar.bounds
        updatedFrame.size.height += 20 //Status bar
        let layer = CAGradientLayer.gradientLayerForBounds(updatedFrame, startColor: UIColor(hexString: "5FD238")!, endColor: UIColor(hexString: "A5E589")!)
        UIGraphicsBeginImageContext(layer.bounds.size)
        layer.renderInContext(UIGraphicsGetCurrentContext()!)
        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return image

    }

viewDidLoad中:

   navigationController!.navigationBar.translucent = false
   navigationController!.navigationBar.tintColor = UIColor.whiteColor()
    navigationController!.navigationBar.setBackgroundImage(imageLayerForGradientBackground(), forBarMetrics: UIBarMetrics.Default)

问题是导航栏下的所有视图现在都被导航栏的高度推下来了(如下图所示):

enter image description here

为什么会这样?任何关于此的指针将不胜感激!谢谢!

编辑:

func setupDrawerView() {

        answerDrawerView = AnswerDrawerView(frame: CGRect(x: 0, y: UIScreen.mainScreen().bounds.size.height - AnswerDrawerView.submitTabHeight, width: UIScreen.mainScreen().bounds.size.width, height: UIScreen.mainScreen().bounds.height*0.75))
        answerDrawerView.delegate = self
        view.addSubview(answerDrawerView)
    }

1 个答案:

答案 0 :(得分:2)

这与渐变无关。这就是这一行:

navigationController!.navigationBar.translucent = false

一旦你说,主视图就会停止导航栏的底层。好吧,你已经绝对定位了你的视图,而不是使用自动布局,所以自从Biology按钮开始,从主视图的顶部向下35个点,它 35个点主视图的顶部 - 但主视图的顶部现在位于导航栏的底部。因此存在差距。

道德:使用自动布局!这种情况正是如此。根据顶部布局指南定位您的视图,而不是主视图的顶部,一切都会很好。