GradientLayer不会水平填充UIButton边界

时间:2015-08-19 19:39:52

标签: ios objective-c iphone swift uibutton

我创建了一个带渐变图层的自定义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" />

这是我在iPhone 6上运行应用程序时按钮的图像: GradientLayer only fills 3/4 of button horizontally

提前感谢您的帮助!

3 个答案:

答案 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
}