web-dev-qa-db-fra.com

La hauteur de la rangée de cellules dans la table

 enter image description here

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?

14
Agung Laksana

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:

 enter image description here

Donnez la valeur que vous voulez à Row height et la cellule sera créée en conséquence.

J'espère que cela peut aider.

30
Irfan

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.

2
luckyShubhra

Ajoutez ce code dans votre UITableViewDelegate

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return 100
}
1
Leo

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.)

  • Affecter et implémenter dataSource et déléguer
  • Attribuez UITableViewAutomaticDimension à rowHeight & installedRowHeight
  • Implémenter des méthodes delegate/dataSource (c'est-à-dire heightForRowAt 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

  • Définir le nombre de lignes = 0 (& mode de saut de ligne = tronquer la queue)
  • Définissez toutes les contraintes (haut, bas, droite à gauche) par rapport à son conteneur superview/cell.
  • Facultatif : définissez la hauteur minimale de l'étiquette, si vous voulez une zone verticale minimale couverte par l'étiquette, même s'il n'y a pas de données.

enter image description here

1
Krunal

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é.

0
findusl

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 :

0
Mansi