J'ai un UITableView avec deux sections. C'est une vue de table simple. J'utilise viewForHeaderInSection pour créer des vues personnalisées pour ces en-têtes. Jusqu'ici tout va bien.
Le comportement de défilement par défaut est que lorsqu'une section est rencontrée, l'en-tête de section reste ancré sous la barre de navigation, jusqu'à ce que la section suivante défile dans la vue.
Ma question est la suivante: puis-je changer le comportement par défaut de sorte que les en-têtes de section ne restent PAS ancrés en haut, mais plutôt défilent sous la barre de navigation avec le reste des lignes de section?
Est-ce que je rate quelque chose d'évident?
Merci.
ios
iphone
uitableview
cocoa-touch
Davidjhinson
la source
la source
Réponses:
La façon dont j'ai résolu ce problème est d'ajuster le en
contentOffset
fonction ducontentInset
dansUITableViewControllerDelegate
(étendUIScrollViewDelegate
) comme ceci:Le seul problème ici est qu'il perd un peu de rebond lors du défilement vers le haut.
{REMARQUE: Le "40" doit être la hauteur exacte de votre en-tête de section 0. Si vous utilisez un nombre plus grand que la hauteur de votre en-tête de section 0, vous verrez que la sensation du doigt est affectée (essayez comme "1000" et vous verrez que le comportement de rebond est un peu bizarre en haut). si le nombre correspond à la hauteur de l'en-tête de la section 0, la sensation du doigt semble parfaite ou presque parfaite.}
la source
Vous pouvez également ajouter une section avec zéro ligne en haut et simplement utiliser le pied de page de la section précédente comme en-tête pour la suivante.
la source
Si c'était moi qui faisais cela, je profiterais du fait que UITableViews dans le style Plain a les en-têtes collants et ceux dans le style Grouped n'en ont pas. J'essaierais probablement au moins d'utiliser une cellule de tableau personnalisée pour imiter l'apparence des cellules simples dans un tableau groupé.
Je n'ai pas vraiment essayé cela, donc cela peut ne pas fonctionner, mais c'est ce que je suggérerais de faire.
la source
tableView.separatorColor = [UIColor clearColor];
pour imiter une vue de tableau simple.Je sais qu'il arrive tard, mais j'ai trouvé la solution définitive!
Ce que vous voulez faire est si vous avez 10 sections, laissez la source de données renvoyer 20. Utilisez des nombres pairs pour les en-têtes de section et des nombres impairs pour le contenu de section. quelque chose comme ça
Voilá! :RÉ
la source
UITableView
que j'utilise.Il y a plusieurs choses à faire pour résoudre ce problème de manière non hacky:
UITableViewStyleGrouped
backgroundColor
de[UIColor clearColor]
backgroundView
cellule de chaque vue de tableau sur une vue vide avecbackgroundColor [UIColor clearColor]
rowHeight
manière appropriée ou remplacez-latableView:heightForRowAtIndexPath:
si les lignes individuelles ont des hauteurs différentes.la source
UITableViewStyleGrouped
les cellules du tableau ont des marges supplémentaires qui changent leur alignement avec l'en-tête. Il s'agit d'un problème lorsque vous souhaitez réellement représenter une table à plusieurs colonnes et utiliser l'en-tête pour afficher les titres des colonnes (puis aligner les entrées de table individuelles sur ces titres).Publié à l'origine ici , une solution rapide utilisant l'IB. La même chose peut être faite par programme mais tout simplement.
Certaines personnes ont commenté en disant que cette solution cache le premier en-tête, mais je n'ai remarqué aucun problème de ce type. Cela a parfaitement fonctionné pour moi et était de loin la solution la plus simple que j'ai vue jusqu'à présent.
la source
Je n'étais pas satisfait des solutions décrites ici jusqu'à présent, j'ai donc essayé de les combiner. Le résultat est le code suivant, inspiré de @awulf et @cescofry. Cela fonctionne pour moi car je n'ai pas d'en-tête de vue tableau réel. Si vous disposez déjà d'un en-tête de vue tableau, vous devrez peut-être ajuster la hauteur.
la source
Changez simplement le style de TableView:
Documentation UITableViewStyle :
la source
Sélectionnez le style de vue de tableau groupé dans l'inspecteur d'attributs de votre tableView dans le storyboard.
la source
Définissez l'en-têteView du tableau avec une vue transparente avec la même hauteur de l'en-tête en vue en coupe. Lancez également la vue de table avec une image à la hauteur.
la source
J'ai trouvé une solution alternative, utilisez la première cellule de chaque section à la place d'une vraie section d'en-tête, cette solution ne semble pas si propre, mais fonctionne si bien, vous pouvez utiliser une cellule prototype définie pour votre section d'en-têtes, et dans la méthode cellForRowAtIndexPath demandez l'indexPath.row == 0, si vrai, utilisez la cellule prototype de la section d'en-tête, sinon utilisez votre cellule prototype par défaut.
la source
indexPath.row
&indexPath.section
, assurez-vous de renvoyer une hauteur de0.0f
for- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
pour que vos en-têtes soient invisibles.Changez votre style TableView:
Selon la documentation Apple pour UITableView:
la source
Maintenant que le style groupé ressemble fondamentalement au style simple dans iOS 7 (en termes de planéité et d'arrière-plan), pour nous, la solution la meilleure et la plus simple (c'est-à-dire la moins hacky) était de simplement changer le style de la vue de tableau en groupé. Jacking avec contentInsets a toujours été un problème lorsque nous avons intégré une barre de navigation déroulante en haut. Avec un style de vue tableau groupé, il a exactement la même apparence (avec nos cellules) et les en-têtes de section restent fixes. Aucune bizarrerie de défilement.
la source
Attribuez un insert négatif à votre tableView. Si vous avez des en-têtes de section haute de 22 pixels et que vous ne voulez pas qu'ils soient collants, juste après avoir rechargé les données, ajoutez:
Fonctionne comme un charme pour moi. Fonctionne également pour les pieds de page, attribuez simplement l'encart négatif en bas à la place.
la source
J'ajoute le tableau à une vue de défilement et cela semble bien fonctionner.
la source
Vérifiez ma réponse ici . C'est le moyen le plus simple d'implémenter les en-têtes de section non flottants sans aucun piratage.
la source
La réponse de @ LocoMike correspondait le mieux à ma tableView, mais elle a également cassé lors de l'utilisation des pieds de page. Voici donc la solution corrigée lors de l'utilisation d'en-têtes et de pieds de page:
la source
Version rapide de @awulf answer, qui fonctionne très bien!
la source
J'ai appris qu'il suffit de définir la propriété tableHeaderView, c'est-à-dire:
et c'est tout.
la source