首页 > 解决方案 > 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])

标签: iosuibuttonswift4gradient

解决方案


  • 您需要设置 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
                }()

推荐阅读