Когда вы определяете ограничения для вашего текстового представления, я бы предложил вам определять их исключительно между текстовым представлением и его суперпредставлением.
Итак, если вы добавляете его программно, вы добавите его в представление содержимого ячейки и определите ограничения между представлением текста и представлением содержимого ячейки:
class CustomCell: UITableViewCell {
weak var textView: UITextView!
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
configure()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
configure()
}
func configure() {
let textView = UITextView()
textView.translatesAutoresizingMaskIntoConstraints = false
contentView.addSubview(textView)
textView.isScrollEnabled = false
self.textView = textView
NSLayoutConstraint.activate([
textView.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 10),
textView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -10),
textView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 10),
textView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -10)
])
}
}
Примечаниеотключение прокрутки, которая инструктирует текстовое представление использовать его собственный размер, чтобы определить его высоту.
В любом случае, мой контроллер представления выглядит следующим образом:
class ViewController: UIViewController {
@IBOutlet weak var tableView: UITableView!
let strings = ["Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"Praesent quis nisl justo. Sed ipsum lacus, consectetur quis varius a, ornare sit amet nisl. Curabitur vulputate felis quis pulvinar maximus. Donec sem lorem, ultrices sed ultricies ac, placerat sit amet purus. Nam elementum risus justo, vitae tincidunt mauris sodales vitae. Integer id fermentum quam. Vivamus a arcu neque. In consectetur, velit in sollicitudin finibus, quam nibh rutrum augue, sed dignissim purus ex id elit. Duis sit amet volutpat sapien. Ut leo sapien, iaculis sit amet ultrices eget, fringilla nec dolor.",
"Etiam aliquam risus vitae cursus mollis. Fusce vulputate nisi sodales est euismod rutrum. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nulla dignissim ante sed massa viverra, in lobortis ligula semper. Maecenas placerat nec erat ut malesuada."]
override func viewDidLoad() {
super.viewDidLoad()
tableView.rowHeight = UITableView.automaticDimension
tableView.estimatedRowHeight = 100
}
}
// MARK: - UITableViewDataSource
extension ViewController: UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return strings.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "CustomCell", for: indexPath) as! CustomCell
cell.textView.text = strings[indexPath.row]
return cell
}
}
, что приводит к:
После всего сказанного я бы, вероятно, добавил бы текстовое представление и его ограничения, установил бы его свойства и т. Д. Прямо в раскадровкеЯчейка прототипа, а затем подключить розетку, и тогда моя ячейка радикально упрощается:
class CustomCell: UITableViewCell {
@IBOutlet weak var textView: UITextView!
}
Это дает точно такой же результат с меньшим количеством кода.Но, показав мой код выше, вы получите представление о том, что я настроил в IB.