J'essaye de redimensionner automatiquement UITableViewCells en fonction du contenu de la cellule; cependant, la hauteur de la ligne ne change pas du tout, donc le contenu est tronqué.
J'ai un UITableViewController avec une cellule prototype. En cela, il y a une vue d'interface utilisateur épinglée avec 0 contrainte de haut, de bas, de début et de fin. À cette vue, j'ai ajouté une ImageView avec une largeur et une hauteur fixes, centrée dans la vue et avec des contraintes supérieures. De plus, il existe une étiquette centrée avec des contraintes de haut et de bas. Les contraintes doivent donc être configurées correctement.
De plus, j'ai ajouté
import UIKit
class FirstTableViewController: UITableViewController{
override func viewDidLoad() {
super.viewDidLoad()
tableView.rowHeight = UITableView.automaticDimension
tableView.estimatedRowHeight = 300.0
}
override func numberOfSections(in tableView: UITableView) -> Int {
// #warning Incomplete implementation, return the number of sections
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
return 1
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cellA = tableView.dequeueReusableCell(withIdentifier: "article", for: indexPath) as! ArticleTableViewCell
cellA.articleText.text = "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus "
return cellA
}
}
au viewDidLoad () du TableViewController .
Au lieu d'obtenir le résultat attendu
l'écran ressemble à ceci: p>
Voici les contraintes:
Toutes les idées se passe-t-il ici?
MODIFIER:
Juste à des fins de test, j'ai maintenant créé une nouvelle cellule prototype et n'y ai ajouté qu'une étiquette, en l'épinglant avec des contraintes de début, de fin, de haut et de bas et en définissant sa propriété lines sur 0 code> pour activer la redimensionnement automatique. Cependant, encore une fois, rien ne se passe, l'étiquette n'enveloppe même pas le texte à l'intérieur.
Voir ici pour le storyboard et les contraintes et le résultat réel: https://imgur.com/a/Hq5frWp
Mon code TableViewController:
tableView.rowHeight = UITableView.automaticDimension tableView.estimatedRowHeight = 300
3 Réponses :
Vérifiez si vous définissez une contrainte de début et de fin sur l'étiquette sur sa super-vue, seule la contrainte de centre horizontal ne suffit pas.
[Vous pouvez également choisir de définir une largeur fixe sans hauteur sur l'étiquette. Ne définissez pas la hauteur du libellé : voir la réponse mise à jour ci-dessous]
Vous voudrez également définir numberOfLines sur l'étiquette sur 0, si vous voulez qu'il se développe en fonction du contenu.
C'est ainsi que la hauteur de l'étiquette sera calculée.
J'ai essayé avec une petite démo et cela fonctionne très bien pour moi.
Mise à jour :
Ne définissez pas la hauteur sur l'étiquette, car elle fixera sa hauteur et ne grandira pas en fonction du contenu.
Comme suggéré par Revanth, la largeur est suffisante, c'est votre choix de définir la contrainte «largeur» ou «début et fin» sur l'étiquette.
Mais assurez-vous que sa hauteur est flexible et numberOfLines = 0 pour qu'il grandisse.
Votre première ligne n'est pas vraie. Si la contrainte nécessaire de largeur et de centre est donnée, cela suffit. La seule possibilité est que vous obteniez un avertissement pour que votre contenu soit tronqué.
@RevanthKausikan Vous avez raison, je viens de donner la meilleure option. Quoi qu'il en soit, c'est bien dans la mesure où la hauteur peut être déduite de l'étiquette. Mise à jour de la réponse
Même avec vos suggestions (ajout de contraintes de début et de fin; suppression de la hauteur fixe), cela ressemble toujours à ça: i. imgur.com/SKiauMr.png
@woaahmxtn Veuillez me montrer la capture d'écran de toutes vos contraintes, je vais peut-être essayer de faire de même et voir ce qui se passe. Montrez-moi également l'erreur de console liée à la contrainte (le cas échéant)
D'après ce que je vois, vos contraintes sont parfaites.
Puisque vous n'avez pas partagé votre code avec nous, je vous indiquerai tous les points de contrôle.
Tout d'abord, vérifiez si vous ' J'ai utilisé correctement la fonction tableView cellForRowAt .
tableView.rowHeight = UITableViewAutomaticDimension tableView.estimatedRowHeight = 300
EDIT
et définissez-le maintenant dans viewDidLoad () de votre TableViewController
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: "thatCellsIdentifier", for: indexPath) as? YourTableViewCell else{
fatalError()
}
cell.label.text = "sample"
cell.image.image = UIImage(named: "yourImage")
return cell
}
ou utilisez l'inspecteur de taille de votre TableViewController pour le définir.
(j'ai gardé la valeur estimée comme automatique dans la capture d'écran, ignorez-la)
À l'exception de la gestion facultative, il semble identique: i.imgur.com/g2NYyMr.png
Intéressant ... J'y reviendrai.
Je viens de supprimer ce TableViewController et de recommencer à zéro. Maintenant, tout fonctionne bien ...
Pourquoi y a-t-il une vue supplémentaire dans la vue de contenu? Une raison spécifique?
Ouais, pour plus tard pour activer les ombres et les coins arrondis
tableView.rowHeight = UITableViewautomaticDimensionne donne-t-il pas une erreur de syntaxe?@RevanthKausikan Non, c'est l'ancien UITableViewAutomaticDimension depuis swift 4.2