添加渐变的 UIButton 被切断

UIButton with added Gradient cuts off

所以我通过扩展将渐变应用于 UIButton:

extension UIButton {

    func addGradient(withColors colors:[CGColor]) {
      let layer_: CAGradientLayer = CAGradientLayer()
      layer_.frame = self.bounds
      layer_.colors = colors
      layer_.shouldRasterize = true
      layer_.rasterizationScale = UIScreen.main.scale
      self.layer.insertSublayer(layer_, at: 0)
    }

}

通过以下方式将其应用于 UIButton:

@IBOutlet weak var startButton: UIButton! {
    didSet {
        startButton.backgroundColor = ECConstants.GenericColors.buttonOrange
        startButton.setTitleColor(UIColor.white, for: .normal)
        startButton.addGradient(withColors: [UIColor.white.withAlphaComponent(0.3).cgColor, UIColor.clear.cgColor])
    }
}

不幸的是,在 iPad Pro 12.9 英寸(iOS 10.1)上,它似乎缩短了按钮的宽度。我也尝试在 viewDidLoad 中应用它,但无济于事。

所以我的问题是如何让渐变贯穿整个过程?或者哪里设置渐变效果最好?

给按钮添加渐变的扩展都是正确的,需要解决的是设置渐变的地方。

移动

startButton.backgroundColor = ECConstants.GenericColors.buttonOrange
startButton.setTitleColor(UIColor.white, for: .normal)
startButton.addGradient(withColors: [UIColor.white.withAlphaComponent(0.3).cgColor, UIColor.clear.cgColor])

viewDidAppearviewDidLayoutSubviews

这是因为一旦 viewDidAppear() 被调用,所有视图的大小都会被计算出来。

对于though-roughness:(支持设备旋转)

确保在 viewDidLayoutSubviews() 中重新计算子层大小。您的按钮会随着设备旋转而改变大小,因此您也需要手动更改子图层的大小。