Swift | Как применить градиент к UIButton и сделать текст жирным на кнопке?
Всем привет! Хочу сделать кнопку с градиентом и жирным текстом, но как только я изменяю толшину и размер шрифта в кнопке, градиент пропадает. Если строчку с изменением шрифта комментирую, градиент появляется. Не могу понять в чем проблема, куда копать?
extension UIView {
func applyGradient() {
let lightBlue = UIColor(named: "lightBlue")!
let blue = UIColor(named: "blue")!
let gradient: CAGradientLayer = CAGradientLayer()
gradient.frame = self.bounds
gradient.colors = [lightBlue.cgColor, blue.cgColor]
gradient.locations = [0.0, 1.1]
self.layer.insertSublayer(gradient, at: 0)
}
}
class LoginViewController
private let loginButton: UIButton = {
let button = UIButton()
button.setTitle("Login", for: .normal)
button.layer.cornerRadius = 20
button.clipsToBounds = true
button.titleLabel?.font = UIFont.systemFont(ofSize: 20, weight: .semibold) // !!!
return button
}()
override func viewDidLayoutSubviews() {
self.loginButton.applyGradient()
}
Ответы (1 шт):
Автор решения: schmidt9
→ Ссылка
У вас не показано как вы выводите loginButton на экран, возможно дело в том как вы это делаете, вот пример где все работает
import UIKit
class ViewController: UIViewController {
private let loginButton: UIButton = {
let button = UIButton()
button.setTitle("Login", for: .normal)
button.layer.cornerRadius = 20
button.clipsToBounds = true
button.titleLabel?.font = UIFont.systemFont(ofSize: 20, weight: .semibold) // !!!
return button
}()
override func viewDidLoad() {
super.viewDidLoad()
self.loginButton.frame = .init(x: 50, y: 50, width: 100, height: 40)
view.addSubview(self.loginButton)
}
override func viewDidLayoutSubviews() {
self.loginButton.applyGradient()
}
}
extension UIView {
func applyGradient() {
let lightBlue = UIColor.lightGray
let blue = UIColor.gray
let gradient: CAGradientLayer = CAGradientLayer()
gradient.frame = self.bounds
gradient.colors = [lightBlue.cgColor, blue.cgColor]
gradient.locations = [0.0, 1.1]
self.layer.insertSublayer(gradient, at: 0)
}
}

