ios - UIButton渐变背景在swift 4中不起作用
问题描述
这是我的 uibutton 代码,它不起作用。我正在以编程方式进行自动布局,在互联网上尝试了许多解决方案,但它不起作用。有什么建议吗?
let ButtonSignUp: UIButton = {
let btn = UIButton()
btn.translatesAutoresizingMaskIntoConstraints = false
btn.setTitleColor(.white, for: .normal)
btn.titleLabel?.font = AppThemeFonts.buttonFonts
btn.layer.cornerRadius = 6
btn.setTitle("SIGNUP", for: .normal)
let gradientLayer = CAGradientLayer()
gradientLayer.frame = btn.bounds
gradientLayer.colors = [UIColor.red.cgColor, UIColor.yellow.cgColor]
btn.layer.insertSublayer(gradientLayer, at: 0)
gradientLayer.startPoint = CGPoint(x: 0.5, y: 0.0)
gradientLayer.endPoint = CGPoint(x: 0.5, y: 1.0)
gradientLayer.locations = [0.0, 1.0]
return btn
}()
以下是我如何在 viewdidload 中设置约束
let buttonsView: UIStackView = {
let view = UIStackView()
view.distribution = .fillEqually
view.axis = .horizontal
view.spacing = 10
view.addArrangedSubview(ButtonSignUp)
view.addArrangedSubview(ButtonLogin)
view.translatesAutoresizingMaskIntoConstraints = false
return view
}()
self.view.addSubview(buttonsView)
let xConstraintButtonView = NSLayoutConstraint(item: buttonsView, attribute: .centerX, relatedBy: .equal, toItem: self.view, attribute: .centerX, multiplier: 1, constant: 0)
let yConstraintButtonView = NSLayoutConstraint(item: buttonsView, attribute: .centerY, relatedBy: .equal, toItem: self.view, attribute: .centerY, multiplier: 1.75, constant: 0)
let widthConstraintButtonView = NSLayoutConstraint(item: buttonsView, attribute: .width, relatedBy: .equal, toItem: self.view, attribute: .width, multiplier: 0.9, constant: 0)
let heightConstraintButtonView = NSLayoutConstraint(item: buttonsView, attribute: .height, relatedBy: .equal, toItem: self.view, attribute: .height, multiplier: 0.068, constant: 0)
self.view.addConstraints([xConstraintButtonView,yConstraintButtonView,widthConstraintButtonView,heightConstraintButtonView])
解决方案
- 您需要设置 btn 的宽度和高度。
- btn.layer.insertSublayer(gradientLayer, at: 0) 在返回 btn 之前调用。
你的代码是这样的: -
let ButtonSignUp: UIButton = {
let btn = UIButton(frame: CGRect(x: 0, y: 0, width: 80, height: 50))
btn.translatesAutoresizingMaskIntoConstraints = false
btn.setTitleColor(.white, for: .normal)
btn.titleLabel?.font = AppThemeFonts.buttonFonts
btn.layer.cornerRadius = 6
btn.setTitle("SIGNUP", for: .normal)
let gradientLayer = CAGradientLayer()
gradientLayer.frame = btn.bounds
gradientLayer.colors = [UIColor.red.cgColor, UIColor.yellow.cgColor]
gradientLayer.startPoint = CGPoint(x: 0.5, y: 0.0)
gradientLayer.endPoint = CGPoint(x: 0.5, y: 1.0)
gradientLayer.locations = [0.0, 1.0]
btn.layer.insertSublayer(gradientLayer, at: 0)
return btn
}()
推荐阅读
- python - 如何从php执行shell命令并且不等待WINDOWS上的输出
- unity3d - 获取“NetworkServer”不包含“SpawnWithClientAuthority”的定义
- ios - 如何使用 Magnolia REST API 在原生 iOS 应用程序中呈现 UI
- ios - iOS - 未配置使用 Apple 登录请求的声明
- c - 如何使用 while 循环将文件的内容读入两个单独的字符缓冲区?
- python-3.x - 我正在编写一个 Tkinter GUI,它将从硬件中读取一个值并使用 pandas 将其写入 CSV 文件,但出现错误
- ffmpeg - laravel 7 ffmpeg 编码失败
- internet-explorer - 带有查询字符串的 IE 9-11 字体问题
- javascript - 如何在javascript的画布中使用计时器制作循环?
- c# - 如何验证字典参数?