Автоматическое изменение размера текста с использованием UILabel в качестве подпредставления UIButton - swift
Я создаю пример приложения, в котором есть тексты UIButton
а также image
, за image
а также text
являются subView
из UIButton
, Я работал с различными устройствами, такими как iPhone 5
, iPhone X
и результат не так, как я ожидал, потому что, если запустить с устройством, экран которого меньше, чем iPhone X
тогда текст будет плавать за пределами кнопки.
Что я сделал до сих пор:
lazy var myLabelButton: UILabel = {
let label = UILabel()
label.translatesAutoresizingMaskIntoConstraints = false
label.text = "titleName"
label.textColor = .white
label.font = UIFont(name: "SFCompactText-Regular", size: 14)
label.adjustsFontSizeToFitWidth = true
label.minimumScaleFactor = 0.5
label.sizeToFit()
return label
}()
Я искал некоторые ресурсы, и они позволили мне применить эти функции:
label.adjustsFontSizeToFitWidth = true
label.minimumScaleFactor = 0.5
label.sizeToFit()
Эти три функции не работают
Вот весь код:
button.addSubview(myLabelButton)
NSLayoutConstraint.activate([
myLabelButton.centerXAnchor.constraint(button.centerXAnchor),
myLabelButton.centerYAnchor.constraint(button.centerYAnchor),
myLabelButton.widthAnchor.constraint(button.widthAnchor)
])
Любое решение для этого?
2 ответа
Попробуйте использовать sizeToFit() на самой кнопке, а не на ярлыке.
Например
button.setTitle("Hello world", for: .normal)
button.sizeToFit()
Вот, пожалуйста, у меня есть решение
let label = UILabel()
label.numberOfLines = 0
label.textColor = .white
let button = UIButton()
button.backgroundColor = .blue
view.addSubview(button)
button.addSubview(label)
label.text = Array(repeating: "Hello", count: 100).joined()
button.translatesAutoresizingMaskIntoConstraints = false
label.translatesAutoresizingMaskIntoConstraints = false
// button constraint
NSLayoutConstraint.activate([
view.leadingAnchor.constraint(equalTo: button.leadingAnchor),
view.trailingAnchor.constraint(equalTo: button.trailingAnchor),
view.centerYAnchor.constraint(equalTo: button.centerYAnchor)
])
// label constaint
NSLayoutConstraint.activate([
button.leadingAnchor.constraint(equalTo: label.leadingAnchor),
button.trailingAnchor.constraint(equalTo: label.trailingAnchor),
button.topAnchor.constraint(equalTo: label.topAnchor),
button.bottomAnchor.constraint(equalTo: label.bottomAnchor)
])