Так вот, я просто не могу найти подходящий случай при поиске здесь.
У меня есть небольшой UIView, который содержит UITextView, и UIView необходимо автоматически изменять размер вокруг TextView для представления поверх другого представления.По сути, TextView должен полностью заполнять UIView, а UIView должен быть достаточно большим, чтобы содержать TextView.
TextView просто содержит пару предложений, которые должны оставаться на экране, пока не произойдет внешняя вещь,и определенные значения меняются.
Все отлично, когда я использовал шрифт фиксированного размера.
Но, эй ... Я старый парень, и на моем телефоне немного увеличен размер текста.Тестирование его на моем устройстве показывает, где я должен что-то упустить.
При использовании динамического стиля шрифта «Заголовок 2» в свойствах текстового представления и включении «Автоматически корректировать шрифт» в свойствах TextView, когда текст больше размера по умолчанию, создается впечатление, что яне правильно фиксирует размер роста TextView (с большим текстом) при создании нового ограничительного прямоугольника, чтобы подбрасывать во фрейм.Он возвращает значения, которые во многом напоминают меньшие значения текста по умолчанию, а не увеличенный размер текста.
Код ниже, код класса представления, а также код вызова (сделан супер явным для публикации здесь).Я полагаю, что я либо упускаю что-то глупое, например захват размера после того, как что-то происходит со шрифтами, но даже перемещение этого кода в новую функцию и явный вызов его после полного отрисовки элементов управления, похоже, этого не делают.
Надеюсь, это имеет смысл.
Спасибо всем.
Телефонный код:
let noWView:NoWitnessesYetView = (Bundle.main.loadNibNamed("NoWitnessesYetView", owner: nil, options: nil)!.first as! NoWitnessesYetView)
//if nil != noWView {
let leftGutter:CGFloat = 20.0
let bottomGutter:CGFloat = 24.0
let newWidth = self.view.frame.width - ( leftGutter + leftGutter )
let newTop = (eventMap.frame.minY + eventMap.frame.height) - ( noWView.frame.height + bottomGutter ) // I suspect here is the issue
// I suspect that loading without drawing is maybe not allowing
// the fonts to properly draw and the
// TextView to figure out the size...?
noWView.frame = CGRect(x: 20, y: newTop, width: newWidth, height: noWView.frame.height)
self.view.addSubview(noWView)
//}
Код класса:
import UIKit
class NoWitnessesYetView: UIView {
@IBOutlet weak var textView: EyeneedRoundedTextView!
override func draw(_ rect: CGRect) {
let newWidth = self.frame.width
// form up a dummy size just to get the proper height for the popup
let workingSize:CGSize = self.textView.sizeThatFits(CGSize(width: newWidth, height: CGFloat(MAXFLOAT)))
// then build the real newSize value
let newSize = CGSize(width: newWidth, height: workingSize.height)
textView.frame.size = newSize
self.textView.isHidden = false
}
override func awakeFromNib() {
super.awakeFromNib()
self.backgroundColor = UIColor.clear // .blue
self.layer.cornerRadius = 10
}
}