Je peux vous donner un exemple qui peut résoudre votre problème. J'utilise SnapKit https://github.com/SnapKit/SnapKit pour mettre à jour les contraintes de UIView
. Ceci est un exemple de UIViewController
où vous voulez montrer votre table:
class ViewController: UIViewController {
private var tableView : UITableView = {
let tabView = UITableView.init(frame: CGRect.zero)
tabView.register(TableViewCell.self, forCellReuseIdentifier: "cell")
return tabView
}()
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.dataSource = self
self.tableView.delegate = self
self.view.addSubview(self.tableView)
}
override func updateViewConstraints() {
self.tableView.snp.remakeConstraints { (maker) in
maker.edges.equalTo(self.view) // your table will have the same frame as your view
}
super.updateViewConstraints()
}
}
Dans la première extension, nous allons mettre toutes les méthodes pour UITableViewDelegate
:
extension ViewController : UITableViewDelegate {
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
return 200.0 // any value different from zero. 200 is an example. This value must be easy-to-calculate.
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableViewAutomaticDimension // tells system that rows will be resized automatically
}
}
Dans la deuxième extension il existe des méthodes pour UITableViewDataSource
(simplement générer des données aléatoires):
extension ViewController : UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 20
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! TableViewCell
cell.setup(labelText: "Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label ", textViewText: "Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text ")
return cell
}
}
et la classe de cellule qui contient UILabel
et UITextView
:
class TableViewCell: UITableViewCell {
private var label : UILabel = {
let resultLabel = UILabel.init(frame: CGRect.zero)
resultLabel.numberOfLines = 0 // If numberOfLines in 0 system will automatically set real number of lines
return resultLabel
}()
private var textView : UITextView = {
let resultTextView = UITextView.init(frame: CGRect.zero)
resultTextView.isScrollEnabled = false // disable scroll and editing just for example
resultTextView.isEditable = false
return resultTextView
}()
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
self.contentView.addSubview(self.label)
self.contentView.addSubview(self.textView)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func setup(labelText:String, textViewText:String) {
self.label.text = labelText
self.textView.text = textViewText
self.setNeedsUpdateConstraints()
}
override func updateConstraints() {
self.label.snp.remakeConstraints { (maker) in
maker.left.equalTo(self.contentView.snp.left)
maker.right.equalTo(self.contentView.snp.right)
maker.top.equalTo(self.contentView.snp.top)
maker.bottom.equalTo(self.textView.snp.top)
}
self.textView.snp.remakeConstraints { (maker) in
maker.left.equalTo(self.contentView.snp.left)
maker.right.equalTo(self.contentView.snp.right)
maker.bottom.equalTo(self.contentView.snp.bottom)
}
super.updateConstraints()
}
}
Vous avez écrit que la mise en forme automatique est désactivée, mais que vous l'ajoutez manuellement au code? Que voulez-vous dire? –
Définissez ces propriétés. tableView.RowHeight = UITableView.AutomaticDimension; tableView.EstimatedRowHeight = 160f; // selon votre cellule. Calculez la hauteur pour la vue de texte. comme dans ce lien: https://stackoverflow.com/a/25158206/1242673 appliquer la hauteur calculée à textview. –
@RomanPodymov je l'ai fait? désolé je suis nouveau dans le développement d'iOS et j'ai eu la tâche de redimensionner le contenu d'un textview. Et on m'a dit qu'autolayout est éteint. – elpatricko