Когда AdjustsFontSizeToFitWidth или boundingRectWithSize меняют context.actualScaleFactor?

Когда изменяется фактическийScaleFactor NSStringDrawingContext?

В документации говорится:

«Если вы указали пользовательское значение в свойстве MinimumScaleFactor, после завершения рисования это свойство будет содержать фактическое значение коэффициента масштабирования, которое использовалось для рисования строки».

Мой код:

myButton.titleLabel!.font = UIFont(name: "AmericanTypewriter-Bold", size: 40)
myButton.titleLabel?.adjustsFontSizeToFitWidth = true
myButton.setTitle("\(textString)", forState: .Normal)

let attributes = [NSFontAttributeName : myButton.titleLabel!.font]
let attributedString = NSMutableAttributedString(string:textString, attributes:attributes)

let context = NSStringDrawingContext()
context.minimumScaleFactor = myButton.titleLabel!.minimumScaleFactor

print("context: \(context.actualScaleFactor)")

let resultingRect = attributedString.boundingRectWithSize(myButton.titleLabel!.bounds.size, options: .UsesLineFragmentOrigin, context: context)

print("actual context after drawing: \(context.actualScaleFactor)")

//want to get the font size after adjustsFontSizeToFitWidth has done its magic:      
//let actualFontSize = myButton.titleLabel!.font.pointSize * context.actualScaleFactor

Журнал консоли для текста, который подходит без сжатия, и для более длинного текста, который настраивается в соответствии с шириной метки, одинаков:

context: 0.0
actual context after drawing: 1.0

Любая идея, какой шаг мне не хватает, чтобы получить реальный масштабный фактор из контекста после того, как размер текста был изменен, чтобы соответствовать метке?


person RanLearns    schedule 05.01.2016    source источник
comment
Спасибо за перевод на Swift. Он отлично работает для меня. У меня есть UILabel с фактическим размером шрифта 70pt, минимальным коэффициентом масштабирования 0,1 и для параметра AdjustsToFit установлено значение true. При выполнении вашего кода ПОСЛЕ viewDidAppear мой вывод консоли показал: контекст: 0,0 фактический контекст после рисования: 0,36 скорректированныйFontSize: 14,4. И действительно, когда я применил этот параметр AdjustFontSize к шрифту моей метки (после установки для параметра AdjustsToFit значения false), изменение текста не меняет размер шрифта.   -  person ObjectiveTC    schedule 21.06.2016
comment
Скорее всего, этот ответ поможет вам stackoverflow.com/a/58340894/9024807   -  person Nikaaner    schedule 11.10.2019


Ответы (2)


сделать это в viewDidAppear... Это сработало для меня

person Kunal Verma    schedule 27.04.2016

Та же проблема, что и у @RanLearns.

После добавления myButton.titleLabel!.minimumScaleFactor = 0.1 у меня сработало

person Quang Tran    schedule 20.07.2016