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.
4 réponses
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
}
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
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.
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.
De nouvelles questions
ios
iOS est le système d'exploitation mobile fonctionnant sur Apple iPhone, iPod touch et iPad. Utilisez cette balise [ios] pour les questions liées à la programmation sur la plate-forme iOS. Utilisez les balises associées [objective-c] et [swift] pour les problèmes spécifiques à ces langages de programmation.