Vues d'en-tête de table dans StoryBoards

191

Existe-t-il un moyen d'insérer une vue d'en-tête de tableau (tableHeaderView) dans StoryBoard (comme nous le faisions dans Interface Builder)?

Tyler DeWitt
la source

Réponses:

349

On dirait que l'on fait simplement glisser un contrôle vers le haut de la vue tableau. Je ne m'attendais pas à ce que ce soit aussi simple.

Avant de tomber

Avant de tomber

Après la chute

Après la chute

Monsieur Rogers
la source
29
J'ai été surpris de constater que c'est ainsi que cela se fait. J'ai remarqué dans mon implémentation que pour que cela fonctionne correctement, je devais supprimer mon code de section heightForHeaderInSection: (NSInteger), sinon je me retrouverais avec un espace supplémentaire au-dessus de la vue d'en-tête elle-même. De plus, pour que cet en-tête "colle" en haut de la vue tableau, j'ai dû implémenter la section viewForHeaderInSection: (NSInteger) et renvoyer cette vue.
ozz
13
Cela ne semble fonctionner que si vous avez au moins une cellule prototype dans le tableau.
Accatyyc
4
@cdo, pouvez-vous expliquer comment vous avez réussi à faire "coller" l'en-tête en haut de la vue de tableau? J'ai essayé de mettre en œuvre aveuglément viewForHeaderInSection:et j'ai eu une erreur disant "Impossible de satisfaire simultanément les contraintes". (Voir ma question ici: stackoverflow.com/questions/14554051/… )
ryanrhee
2
Merci, je ne pouvais pas faire ça tant que je ne savais pas que cela fonctionnerait, une traînée de précision était requise. J'avais essayé de le faire plusieurs fois ...
Dave Ross
1
Vous pouvez utiliser le contour sur la gauche pour faire le glissement, ce qui est plus facile à faire que d'essayer d'atteindre l'endroit exact au-dessus de la première cellule prototype, si vous souhaitez définir la vue d'en-tête du tableau. J'ai remarqué - peut-être un bogue Xcode (5.0) - que cela ne fonctionnerait que lorsque j'avais d'abord déplacé la vue hors de la hiérarchie normale; Je l'ai fait glisser jusqu'au bas du contour de cette scène. Ensuite, dans une 2ème étape, j'ai pu le déplacer sur la vue tableau.
Daniel Schneller
10

Vous pouvez le faire facilement en faisant glisser votre UIView/ UIImageViewjuste en dessous du UITableViewdans le contour du document (au lieu de la mise en page).

Si vous essayez de faire glisser la mise en page au lieu du contour du document, vous UITableViewCellpasserez à la gestion supérieure, ce qui est frustrant!

PANKAJ VERMA
la source
-2

Faire glisser et déposer une vue au-dessus de la vue de la table ne fonctionnait que pour une seule taille d'écran, au moins dans Xcode 11. Il n'était pas bien dimensionné sur différents écrans.

Je viens de créer une vue et je l'ai laissée derrière la vue de table dans le storyboard. J'ai créé un IBOutlet pour cela:

@IBOutlet weak var audioView: UIView!

Ensuite, dans le code tableview, j'ai fait:

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    return audioView
}

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return 142
}

Cela a bien fonctionné sur toutes les tailles d'écran.

Badr
la source
1
La question concerne la vue d'en-tête de table, pas les vues d'en-tête de section.
R. Rincón
@R. Rincón, Où ai-je mentionné un en-tête de section? La section dans les méthodes sont nécessaires à partir du framework. Chaque TableView a au moins une section si vous ne le savez pas. Passez simplement la section 0 Si vous n'avez pas de sections.
Badr
Ce code renvoie audioView pour chaque section comme en-tête de section. Si quelqu'un implémente cela, tableView.tableHeaderView sera nul. S'ils ont 5 sections, ils auront cinq en-têtes de section. S'ils ont déjà des en-têtes de section et souhaitent ajouter une vue d'en-tête de tableau, cette réponse ne les aide pas. Cela ne répond pas à la question, qui mentionne spécifiquement tableHeaderView.
R. Rincón
Vous pouvez spécifier la vue d'en-tête pour chaque section avec une logique à l'intérieur de la méthode. TableViews construit avec des sections à l'esprit. Vous avez toujours des sections, si vous n'en avez pas, alors ce serait la section 0. Il n'y a pas de méthode pour spécifier la vue d'en-tête sans spécifier une section.
Badr