У меня UIButton размером 50x50. Как установить размер шрифта titleLable меньше, чем размер, созданный с помощью adjustFontSizeToFitWidth, чтобы размер шрифта подходил, скажем, настраиваемый фрейм, например 30x30, а размер UIButton - 50x50?
let but:UIButton = UIButton(frame: CGRect(x: 80, y: 80, width: 70, height: 50))
view.addSubview(but)
but.backgroundColor = .white
but.titleLabel?.backgroundColor = .green
but.setTitle("hello", for: .normal)
but.setTitleColor(.red, for: .normal)
//this gives the second image, still having the text uncentered.
//but.contentVerticalAlignment = .fill
but.titleLabel?.font = UIFont(name: "WarsawGothicSuExt", size: 60)
but.contentEdgeInsets = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
but.titleLabel?.adjustsFontSizeToFitWidth = true
but.layoutIfNeeded()
Вы добавляете вставку содержимого, которая определяет отступ между границами кнопки и ее содержимого:
button.contentEdgeInsets = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
button.titleLabel?.adjustsFontSizeToFitWidth = true
button.layoutIfNeeded()
print(button.bounds) // (0, 0, 50, 50)
print(button.titleLabel?.bounds) // (0, 0, 30, 18)
Звонить в layoutIfNeeded()
не нужно. Он включен здесь, чтобы кнопка обновлялась немедленно, чтобы мы могли получить ограничивающие прямоугольники.
Круто, я этого не знала. Но столкнулся с другой проблемой. Какой бы вы сделали начальный размер шрифта? Если я сделаю его слишком маленьким, он будет хорошо вписываться в кнопку, но adjustsFontSizeToFitWidth, а UIEdgeInserts ничего не сделает, чтобы он хорошо вписался в кнопку. С другой стороны, если я сделаю шрифт слишком большим, высота titleLable станет проблемой (подтолкнуть текст вниз, а не центрировать его на кнопке). Я отредактировал свой вопрос образцом кода и тем, что у меня есть.