J'essaie de définir la hauteur de chaque cellule dans la vue du tableau en fonction de l'identifiant. Je ne veux pas utiliser indexPath.row, car je remplis la cellule à partir d'un tableau contenant un drapeau pour chaque type de cellule et l'ordre est aléatoire. Exactement 3 types de cellules.

J'ai utilisé ce code mais cela a causé une erreur:

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {

    let cell = tableV.cellForRow(at: indexPath)
    if(cell?.reuseIdentifier == "homeFeaturedR"){
        return 200
    }else{
       return 360
    }
}

L'erreur est à cette ligne:

let cell = tableV.cellForRow(at: indexPath)

Je vous remercie.

3
yasser h 16 nov. 2017 à 10:33

4 réponses

Meilleure réponse

Votre méthode heightForRowAt est appelée avant cellForRowAt. Cela signifie qu'au moment où heightForRowAt est appelé, la cellule de ce chemin d'index n'est pas encore créée. Par conséquent, vous ne pouvez pas accéder à son reuseIdentifier ou à quelque chose comme ça.

Cela signifie qu'au lieu d'essayer de déterminer la hauteur à renvoyer en regardant la cellule, vous devriez essayer de déterminer la hauteur à l'aide de votre modèle.

Les vues de table dynamiques doivent avoir une source de données / un modèle. Votre vue de table devrait également en avoir une. Regardez votre méthode cellForRowAtIndexPath, dans quelles conditions retirez-vous une cellule avec l'identifiant homeFeatureR? Il s'agit probablement d'une instruction if vérifiant quelque chose:

if someCondition {
    let cell = tableView.dequeueReusableCell(withIdentifier: "homeFeatureR")!
    // set properties
    return cell
}

Maintenant, vous pouvez simplement vérifier si someCondition est vrai, si c'est vrai, cela signifie que l'identifiant de la cellule doit être "homeFeatureR", ce qui signifie que vous devez renvoyer 200.

if someCondition {
    return 200
} else {
    return 360
}
5
Sweeper 16 nov. 2017 à 07:51

Parler du cycle de vie UITableView

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat

Ça s'appelle avant

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell

Donc je suppose que votre

func cellForRow(at indexPath: IndexPath) -> UITableViewCell?

Renvoie nul

1
Andrea Mugnaini 16 nov. 2017 à 07:38

Première cellule duque

    let cell = tableView.dequeueReusableCellWithIdentifier("CellIdentifier", forIndexPath: indexPath) as UITableViewCell

Après cela, définissez la hauteur de cellule comme vous le souhaitez.

-1
Shauket Sheikh 16 nov. 2017 à 07:45

Vous semblez mal lorsque vous sélectionnez tableView. Vous utilisez le tableV pas un tableView à l'intérieur de la fonction heightForRowAt indexPath. Changeons cela et réessayons, même si ce n'est pas une des meilleures façons dans mon esprit.

0
Huy Nguyen 16 nov. 2017 à 07:44
47323986