将渐变图像设置为 UINavigationBar 背景的问题
Issues setting gradient image as UINavigationBar background
我正在尝试为导航栏设置渐变图像背景。代码是这样的:
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)
}
这与渐变无关。都是关于这一行的:
navigationController!.navigationBar.translucent = false
你一说,主视图就不再重叠导航栏了。好吧,您已经完全定位了您的视图而不是使用自动布局,所以由于 Biology 按钮比方说从主视图顶部向下 35 点,它是 still 35从主视图的顶部向下指向——但主视图的顶部现在位于导航栏的底部。因此差距。
寓意:使用自动布局!这种情况正是它的目的。相对于顶部布局指南定位您的视图,而不是主视图的顶部,一切都会很好。
我正在尝试为导航栏设置渐变图像背景。代码是这样的:
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)
}
这与渐变无关。都是关于这一行的:
navigationController!.navigationBar.translucent = false
你一说,主视图就不再重叠导航栏了。好吧,您已经完全定位了您的视图而不是使用自动布局,所以由于 Biology 按钮比方说从主视图顶部向下 35 点,它是 still 35从主视图的顶部向下指向——但主视图的顶部现在位于导航栏的底部。因此差距。
寓意:使用自动布局!这种情况正是它的目的。相对于顶部布局指南定位您的视图,而不是主视图的顶部,一切都会很好。