Мне нравится использовать метод, представленный каналом Lets Build That App (ознакомьтесь с динамическим содержимым ячеек новостной ленты Facebook), вместо sizeToFit.Я использую прокрутки.Это типичный метод, который я использую, чтобы получить высоту.Определенно принимает во внимание размер шрифта, новые строки и почти все, что я смог дать.
По сути, метод заключается в следующем: когда я размечаю виды, я рассчитываю приблизительный размер каждого вида на основе его содержимого, а затем использую эти вычисления для соответствующего обновления кадра.Я создал расширение для UILabel, чтобы упростить это.Вы должны уточнить, по крайней мере, о высоте или ширине.Обычно ширина свободна.
extension UILabel {
func getEstimatedHeight(width: CGFloat) -> CGFloat {
let size = CGSize(width: width, height: 1000)
let options = NSStringDrawingOptions.usesFontLeading.union(.usesLineFragmentOrigin)
let estimatedFrame = NSString(string: self.text ?? "").boundingRect(with: size, options: options, attributes: [NSAttributedStringKey.font: self.font], context: nil)
return estimatedFrame.height
}
}
Возможно, вам также придется добавить коэффициент «выдумки» к вашему росту после того, как он будет возвращен.
let myViewEstimatedHeight = toView.getEstimatedHeight(width: width - 100)
myView.view.frame = CGRect(x: 20, y: 20, width: width,
height: myViewEstimatedHeight + 3)