Regroupés UITableView montre vide de l'espace lorsque l'article est vide
J'ai un groupés UITableView où toutes les sections ne peut être affichée à la fois, la table est stimulée par certaines des données que chaque enregistrement peut avoir. Mon problème, c'est que les enregistrements qui n'ont pas certaines sections présentent comme des espaces vides dans le tableau (voir photo)
le texte d'alt http://img220.imageshack.us/img220/5633/screenshot20100322at228.png
Il n'y a pas des pieds de page/en-têtes. Tout ce que j'ai manqué?
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
//Return the number of rows in the section.
return [self getRowCount:section];
}
//Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
cell.textLabel.text = [NSString stringWithFormat:@"section: %d row: %d",indexPath.section,indexPath.row];
//Configure the cell...
return cell;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
float height = 0.0;
if([self getRowCount:indexPath.section] != 0){
height = kDefaultRowHeight;
}
return height;
}
- J'ai une réponse simple pour le même problème ici: stackoverflow.com/a/22185534/2789144
Vous devez vous connecter pour publier un commentaire.
Dans la capture ci-dessus, est votre
numberOfSectionsInTableView:
méthode retournant une valeur de 5? Et puis c'est votregetRowCount:
méthode (appelée à partir denumberOfRowsInSection:
) retournant une valeur de 0 pour les personnes "disparues" sections (par exemple 1, 3 et 4)?Si vous ne voulez pas les écarts entre les deux, qui est probablement la solution est de ne déclarer le nombre de sections que vous souhaitez être visible. Dans l'exemple ci-dessus, vous ne voulez retourner à la valeur de 3 à partir de
numberOfSectionsInTableView:
.J'ai une situation similaire et mon modèle de données fonctionne vraiment mieux si je peux la laisser en sections vides.
Votre problème peut être résolu si vous définissez
self.tableView.sectionHeaderHeight = 0;
etself.tableView.sectionFooterHeight = 0;
dans votre tableview contrôleur. Ceux-ci doivent être de 0 parce que le délégué méthodes en quelque sorte ignorer une valeur de retour de 0. Ensuite, vous avez à remplacer certains délégué méthodes:Ce code fera également l'écart entre les sections de la même hauteur que l'écart avant la première section et l'écart en dessous de la dernière. Qui ressemble mieux à mon avis que la valeur par défaut, où l'écart entre les deux est deux fois plus gros que ceux du haut et du bas.
if ([self tableView: tableView numberOfRowsInSection: section] == 0)
et le retour d'une vue avec une taille de zéro pourviewForHeaderInSection
/viewForFooterInSection
si le nombre de lignes est de 0.Voici la solution qui a fonctionné pour moi
Cette solution est basée sur user362178 solution. Mais conserve les étiquettes des sections intactes:
Définir quelque part en haut de votre code:
Ajouter à la vue, ne charge:
Ajouter ces méthodes:
Ici est la solution la plus élégante que j'ai trouve ici toutes les réponses, plus cette réponse:
J'ai eu le même problème dans iOS 7 et enfin j'ai résolu ce problème en vérifiant la Hauteur de l'en-Tête et Pied de page des sections, comme Ramesh a dit:
}
}
C'est curieux, mais si vous choisissez 0.f comme la hauteur des sections est montré avec une taille par défaut et se déplace vers le bas les autres sections.
Je pense qu'avec la section des vues de table, chaque section doit exister, et chaque section a de la mémoire tampon de la salle pour un en-tête et un pied de page indépendamment de vous mettre du texte en eux. Ce que vous devez faire est de supprimer les sections qui ne sont pas utilisés. Dans votre exemple, vous souhaitez supprimer l'article 1, 3, et 4. Cela signifierait:
de la section"0" est indexPath.section == 0
"section 2" est indexPath.section == 1
"section 5" est indexPath.section == 2
Si vous le code de cette manière, les en-têtes et pieds de page va être supprimée parce que le néant de la cellule est supprimée.
Ce n'est pas bon codage, bien sûr, mais je voulais juste vous donner une idée de la théologie.
Espérons que cette aide.
La clé est de définir l'affichage de la table de
sectionHeaderHeight
etsectionFooterHeight
à zéro.Vous pouvez le faire soit dans
viewDidLoad
, ou dans le Défini par l'Utilisateur Runtime Attributs la section de votre table de montage séquentiel/xib. Pour quelque raison, de la Taille de l'Inspecteur de l'onglet, vous ne pouvez pas définir l'en-tête ou le pied de page de la hauteur en dessous de 1.J'ai trouvé qu'une fois que je l'ai fait, je n'ai pas besoin de remplacer n'importe quel autre délégué méthodes d'une manière spéciale. J'ai simplement retourner
0
denumberOfRowsInSection
etnil
detitleForHeaderInSection
pour les sections sont vides, et ils ne prennent pas de place dans mon tableau.Sections qui ont des titres sont automatiquement étant donné la bonne taille d'en-tête et la partie supérieure de l'affichage de la table a encore le défaut d'espace vide.
J'ai résolu le problème en définissant tableView de source de données et délégué où j'initialise la tableView.
Remarque: n'oubliez pas que vous devrez faire tableView paresseux pour attribuer lors de l'initialisation de la tableView.
J'ai résolu le problème en définissant tableView de source de données et délégué où j'initialise la tableView
Rappelez-vous que vous pourriez avoir besoin de faire tableView paresseux pour attribuer lors de l'initialisation de la tableView