我正在尝试为导航栏设置渐变图像背景。代码是这样的:
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)
问题是导航栏下的所有视图现在都被导航栏的高度推下来了(如下图所示):
为什么会这样?任何关于此的指针将不胜感激!谢谢!
编辑:
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)
}
答案 0 :(得分:2)
这与渐变无关。这就是这一行:
navigationController!.navigationBar.translucent = false
一旦你说,主视图就会停止导航栏的底层。好吧,你已经绝对定位了你的视图,而不是使用自动布局,所以自从Biology按钮开始,从主视图的顶部向下35个点,它仍 35个点主视图的顶部 - 但主视图的顶部现在位于导航栏的底部。因此存在差距。
道德:使用自动布局!这种情况正是如此。根据顶部布局指南定位您的视图,而不是主视图的顶部,一切都会很好。