J'ai essayé de coder de manière stricte la hauteur des lignes dans la cellule de la vue tableau. Après avoir exécuté le programme, cela ressemble à une seule ligne. Je suppose que c'est à cause de la hauteur de la ligne de la vue tableau.
Pourriez-vous s'il vous plaît me dire ce qui s'est mal passé ici?
Dans XCode 9, tableview
crée automatiquement des cellules estimées en fonction de Autolayout
. Puisque vous n'avez pas fourni d'autolayout, c'est pour cela que vous l'obtenez.
Vous devez désactiver la taille de cellule estimée et automatique en sélectionnant tableview et décochez les deux options suivantes:
Donnez la valeur que vous voulez à Row height et la cellule sera créée en conséquence.
J'espère que cela peut aider.
Définissez la hauteur de la ligne ainsi que la hauteur estimée de la ligne comme automatique dans viewDidLoad()
le
table.rowHeight = UITableViewAutomaticDimension
table.estimatedRowHeight = UITableViewAutomaticDimension
Dans heightForRowAt:
, définissez height sur UITableViewAutomaticDimension
as
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
Remarque: définissez le nombre de lignes de l'étiquette long restaurant name
sur 0.
Ajoutez ce code dans votre UITableViewDelegate
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 100
}
Assurez les étapes suivantes pour rendre la cote automatique effective pour la présentation de hauteur de cellule/ligne. (Voici un exemple de code pour UILabel et comment définir une hauteur spécifique au contenu pour une cellule de tableau.)
UITableViewAutomaticDimension
à rowHeight & installedRowHeightheightForRowAt
et lui renvoyer une valeur UITableViewAutomaticDimension
)-
@IBOutlet weak var table: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
// Don't forget to set dataSource and delegate for table
table.dataSource = self
table.delegate = self
// Set automatic dimensions for row height
// Swift 4.2 onwards
table.rowHeight = UITableView.automaticDimension
table.estimatedRowHeight = UITableView.automaticDimension
// Swift 4.1 and below
table.rowHeight = UITableViewAutomaticDimension
table.estimatedRowHeight = UITableViewAutomaticDimension
}
// UITableViewAutomaticDimension calculates height of label contents/text
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
// Swift 4.2 onwards
return UITableView.automaticDimension
// Swift 4.1 and below
return UITableViewAutomaticDimension
}
Pour l'instance d'étiquette dans UITableviewCell
Après ce guide qui a fonctionné pour moi, vous devez ajouter un tas de contraintes, puis la hauteur de ligne est calculée automatiquement.
En bref, ce que j’ai fait: (en ajoutant et en modifiant les contraintes, c’est les deux boutons les plus à droite en bas à droite de la vue du storyboard) J’ai tout d’abord sélectionné toutes les vues de la cellule prototype, puis supprimé toutes les contraintes (il existe une option Nice sur le bouton le plus à droite), puis ajouté toutes les contraintes manquantes (une autre option de Nice ici) et dernier, j’ai choisi le deuxième bouton à droite et cliqué sur toutes les lignes rouges. Vous pouvez le faire en sélectionnant toutes les vues en même temps. Et puis ça a marché.
Si vous souhaitez que les cellules occupent de l'espace en fonction de son contenu, vous devez renvoyer UITableViewAutomaticDimension dans la vue tabulaire - méthodes délégué heightForRowAt : et installedHeightForRowAt :