UITableView reloadSections/reloadData: vue d'en-tête se vide de
J'ai un UITableView avec certaines sections, chaque a son propre en-tête de la vue.
Lorsque l'utilisateur appuie sur la vue d'en-tête d'une section, toutes les lignes de cette section va s'effondrer. Ce que je fais est, j'ai mis le numéro de ligne de cette section à 0, puis composez le :
[self.tableView reloadSections:sections withRowAnimation:UITableViewRowAnimationBottom];
Tout fonctionne comme prévu, sauf une chose : la vue d'en-tête de la section devient blanche. Quand j'ai faites défiler la table, puis l'en-tête devient de nouveau normal.
Donc je pense qu'il y a un problème avec le dessin de la table.
Un drôle de truc, c'est que si j'utilise UITableViewRowAnimationFade au lieu de cela, puis même quand j'ai faites défiler la table, la tête est encore vierge blanche.
Quand je l'ai mise à jour juste UN article il y a également pas de problème - quand-je mettre à jour plus d'une section, le problème se produit.
Si j'utilise
[self.tableView reloadData]
au lieu de cela, alors tout fonctionne bien.
Cette raison que j'utilise
[self.tableView reloadSections:sections withRowAnimation:UITableViewRowAnimationBottom];
est parce que je veux de l'animation.
Emballage avec beginUpdates /endupdates ne fonctionne pas.
Vous devez vous connecter pour publier un commentaire.
Je me rends compte que c'est un LONG temps depuis que cette question a été posée, mais je pense que toutes les réponses données ci-dessous sont incorrectes.
J'ai eu le même problème (avec quelqu'un d'autre code) et était sur le point de se laisser berner par ce post quand j'ai réalisé que le code n'a pas été fait, c'est la réutilisation de la table d'en-tête correctement. L'en-tête était en train de disparaître parce que le code est uniquement la fourniture d'une UIView, pas un UITableViewHeaderFooterView, correctement enregistrés et mis en place pour la réutilisation.
Ont un coup d'oeil à la réponse ici:
Comment utiliser UITableViewHeaderFooterView?
Mes en-têtes vides a disparu lorsque j'ai configuré une réutilisables en-tête.
UITableViewCell
avec Xib-Fichier d'en-Tête. La chose drôle est que j'ai quitté la Xib comme il l'a été et vient de faire la classe personnalisée sous-classe deUITableViewHeaderFooterView
et changé le registre et la file d'attente des fonctions pour l'affichage de la table et il a été fonctionne 🙂J'ai trouvé une façon de contourner ce - pas très élégant, mais ça fonctionne.
Au lieu de fournir une NSIndexSet avec plus d'un article, je l'appelle le reloadSections à l'intérieur d'une boucle for avec un seul article dans chaque appel.
ressemble:
Dans Swift:
Vous avez besoin de créer une classe qui est une sous-classe de
UITableViewHeaderFooterView
, et de l'inscrire à la vue de la table. Puis dansviewForHeaderInSection
, vous nelet header = tableView.dequeueReusableHeaderFooterView(withIdentifier: "HeaderView") as! YourHeaderView
, similaire à ce que vous faites pour UITableViewCells. Puis retour queheader
.Le trompeur, c'est la fonction des appels pour un retour de
UIView?
quand il a vraiment besoin d'une dequeuedReusableHeaderFooterView oureloadData
volonté de le faire disparaîtreJ'ai eu un problème similaire, sauf que j'essayais de supprimer/insérer des sections, et j'ai trouvé que le maintien d'une forte propriété pointant sur l'ensemble de la vue d'en-tête (c'est à dire pas seulement une sous-vue) il s'est arrêté en train de disparaître au cours de la section des mises à jour.
par exemple, de la Propriété et de l'instanciation
@property (nonatomic, strong) UIView *headerView;
Et dans
tableView:(UITableView *)viewForHeaderInSection:(NSInteger)section
:J'ai eu le même problème et ce n'était pas de la ci-dessus. Mon problème était que j'étais cachent le premier en-tête et pour une raison quelconque après plus de 10 de la recharge de l'en-tête à l'index 2 a été mis en caché. Lorsque j'ai mis headerView.hidden = false, elle était ok.