Поскольку sizeToFit()
не сработало для вас, мы попробуем что-то более сложное.
Ячейка в разделе 3 - , отображающая данные в правильном направлении. Это связано с тем, что UILabel
s автоматически не регулируют свою высоту, чтобы разместить текст внутри. Вот что вам нужно сделать:
1. Создайте ограничение высоты для вашей UILabel В конструкторе интерфейса добавьте ограничение для высоты UILabel
в ячейке раздела 3. Соедините это ограничение по высоте с классом вашего контроллера представления через @IBOutlet
:
class YourViewController: UIViewController {
@IBOutlet var cellLabel: UILabel!
@IBOutlet var cellLabelHeight: NSLayoutConstraint!
...
}
2. Добавьте расширение String, которое вычисляет высоту Я не уверен, где / когда вы устанавливаете текст рассматриваемого UILabel
, но я знаю, что вы делаете это где-то, поскольку вы описали его как «динамический». Всякий раз, когда вы устанавливаете текст рассматриваемого UILabel
, теперь вам также необходимо изменить константу ограничения высоты, которую мы установили, чтобы вместить этот текст. Итак, мы должны иметь возможность вычислить высоту UILabel
на основе его ширины и шрифта. Мы можем добавить extension
к String
, чтобы сделать это:
extension String {
func height(withConstrainedWidth width: CGFloat, font: UIFont) -> CGFloat {
let constraintRect = CGSize(width: width, height: .greatestFiniteMagnitude)
let boundingBox = self.boundingRect(with: constraintRect, options: .usesLineFragmentOrigin, attributes: [.font: font], context: nil)
return ceil(boundingBox.height)
}
}
3. Установите константу ограничения высоты на основе текста UILabel Последний шаг - установить высоту ограничения высоты UILabel
, которое мы создали, используя только что созданное нами расширение:
cellLabel.text = "DummyDataDummyDataDummyDataDummyDataDummyDataDummyDataDummyDataDummyData"
//This will be called immediately after you set the text for the UILabel in question
cellLabelHeight.constant = cellLabel.text.height(withConstrainedWidth: cellLabel.frame.width, font: cellLabel.font)