我创建了一个带渐变图层的自定义UIButton。当我在iPhone上测试应用程序时,按钮会垂直填充渐变图层,但渐变图层只会水平填充3/4的按钮。它仍会在按钮的未着色部分触发输入事件,因此我知道按钮的大小是正确的,但我似乎无法弄清楚如何让GradientLayer完全填充按钮。
这是我自定义UIButton的来源:
<span class="post-tag">
aasdfas
<span class="delete-tag" title="remove this tag"></span>
</span>
<span class="post-tag">
basdfasdf
<span class="delete-tag" title="remove this tag"></span>
</span>
<span class="post-tag">
basdfasdf
<span class="delete-tag" title="remove this tag"></span>
</span>
<br/>
<br/>
<br/>
<img src="https://cdn0.iconfinder.com/data/icons/gcons-2/24/laptop1-16.png" />
提前感谢您的帮助!
答案 0 :(得分:3)
您使用的是自动布局吗?将渐变图层框架设置为更大的框架后,可能会调整按钮的大小。
您可以尝试在viewDidLayoutSubviews
中重新设置图层框架。
答案 1 :(得分:2)
在viewDidLayoutSubviews中设置图层框架是有效的,但是在这里他是在视图中,所以它应该进入
func layout()
(在致超级电话之后)。
答案 2 :(得分:1)
谢谢你的回答。帮助我走上了正确的轨道。我在layoutSubviews()中调整图层大小,这是代码
let gradientLayer: CAGradientLayer = CAGradientLayer()
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
let topColor = UIColor(red: (40/255.0), green: (168/255.0), blue: (94/255.0), alpha: 1)
let bottomColor = UIColor(red: 0, green: (134/255.0), blue: (55/255.0), alpha: 1)
let gradientColors: [CGColor] = [topColor.CGColor, bottomColor.CGColor]
let gradientLocations: [Float] = [0.0, 1.0]
gradientLayer.colors = gradientColors
gradientLayer.locations = gradientLocations
gradientLayer.cornerRadius = 5.0
self.layer.addSublayer(gradientLayer)
}
override func layoutSubviews() {
super.layoutSubviews();
gradientLayer.frame = self.bounds
}