it-roy-ru.com

Отрегулируйте размер шрифта текста, чтобы он поместился в UIButton

Я хочу убедиться, что текст кнопки вписывается в UIButton, в то время как UIButton имеет фиксированный размер. 

Конечно, я могу получить доступ к titleLabel UIButton . В метке я бы установил для autoshrink минимальный масштаб шрифта, который, кажется, соответствует 

self.myButton.titleLabel.adjustsFontSizeToFitWidth = YES;

, но на самом деле не ведет себя так же, так как он только делает текст вписывается горизонтально в границы, а не вертикально, тем самым не изменяя размер шрифта.

Как я могу на самом деле программно отрегулировать размер шрифта надписи, чтобы текст вписался в границы надписи (как показано в Goal на рисунке ниже)?

 adjustsFontSizeToFitWidth does not actually adjust the font size to fit the frame, only the width

Я уже пробовала 

self.myButton.titleLabel.numberOfLines = 0;
self.myButton.titleLabel.minimumScaleFactor = 0.5f;

безуспешно, всегда заканчивалось как в adjustsFontSizeToFitWidth на левой стороне картинки выше.

Edit: Решение также должно быть совместимо с ios7

31
MarkHim
self.mybutton.titleLabel.minimumScaleFactor = 0.5f;
self.mybutton.titleLabel.numberOfLines = 0;   <-- Or to desired number of lines
self.mybutton.titleLabel.adjustsFontSizeToFitWidth = YES;

... сделал свое дело, после layoutIfNeeded в viewDidLoad Оказывается, все они должны быть настроены на фактическую настройку размера шрифта, а не просто вписывание его в кадр.

Обновление для Swift 3:

mybutton.titleLabel?.minimumScaleFactor = 0.5
mybutton.titleLabel?.numberOfLines = 0   <-- Or to desired number of lines
mybutton.titleLabel?.adjustsFontSizeToFitWidth = true
72
MarkHim

Вы также можете установить пользовательский атрибут времени выполнения в Интерфейсном Разработчике для кнопки где 

titleLabel.adjustsFontSizeToFitWidth = true
5
StackUnderflow

Обновленный код для Swift 3.0:

yourButton.titleLabel?.minimumScaleFactor = 0.5
yourButton.titleLabel?.numberOfLines = 0
yourButton.titleLabel?.adjustsFontSizeToFitWidth = true
5
CodeBender

Попробуйте вызвать следующий метод.

button.titleLabel?.baselineAdjustment = UIBaselineAdjustment.AlignCenters
3
Jason Nam

попробуй это:

  [myButton setFont:[[myButton font] fontWithSize:--originalButtonFontSize]];
  textWidth = [text sizeWithFont:[myButton font]].width;

}
1
Wostein

В Xcode-> Открыть раскадровку-> Перейти к атрибуту инспектора-> Управление-> Выравнивание-> Выбрать второй как по горизонтали, так и по вертикали.

или же 

YourButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
0
VJVJ