Вот решение для Swift 4 (на основе Arie Litovsky answer), вы можете поместить этот код в textViewDidChange(_ textView: UITextView)
метод делегата:
Уменьшение шрифта:
while (textView.contentSize.height > textView.frame.size.height) {
guard let fontName = textView.font?.fontName, let fontSize = textView.font?.pointSize else {return}
if fontSize < 12 {
return
}
textView.font = UIFont(name: fontName, size: fontSize - 1)
textView.layoutIfNeeded()
}
И масштабирование шрифта:
while (textView.contentSize.height < textView.frame.size.height) {
guard let fontName = textView.font?.fontName, let fontSize = textView.font?.pointSize else {return}
if fontSize > 15 {
return
}
textView.font = UIFont(name: fontName, size: fontSize + 1)
textView.layoutIfNeeded()
}
Вы можете изменить fontSize < 12
и fontSize > 15
в соответствии с вашими потребностями в минимальном и максимальном размере шрифта.