35 votes

Comment rendre la hauteur de UITableView dynamique avec la fonction autolayout?

J'utilise autolayout dans Xcode 5.

Je règle la hauteur de la vue de table sur Supérieur ou égal à 200px. Je veux qu'il ait une taille dynamique. Parce que parfois, il aura plusieurs lignes, parfois, il aura quelques lignes.

Mais la taille est toujours 200px. Et si le contenu est plus volumineux que cela, je devrais faire défiler l'écran vers le bas pour voir les rangées inférieures.

Que dois-je faire pour donner à la table une taille dynamique? entrez la description de l'image ici

66voto

Juan Catalan Points 697

C'est avec Xcode 4.6 et l'iPhone, mais je crois qu'il va travailler dans Xcode 5.

1)Dans Xcode cliquez sur vous la vue de la table pour le sélectionner.

2)Dans les services de volet (voir photo 1) sélectionnez la contrainte pour l'affichage de la table hauteur, cliquez sur la petite icône en forme d'engrenage et choisissez "Promouvoir à l'utilisateur de contrainte". L'icône de l'onu le droit de changer de couleur du violet au bleu (voir photo 2)

Table view heigth constraintenter image description here

3)Dans le contrôleur affiche la table vue de créer un débouché à cette contrainte:

@property (strong, nonatomic) IBOutlet NSLayoutConstraint *dynamicTVHeight;

4)mettre ce code dans la même vue contrôleur:

- (void)viewWillAppear:(BOOL)animated
{
    // just add this line to the end of this method or create it if it does not exist
    [self.mainTable reloadData]; 
}

-(void)viewDidLayoutSubviews
{
    CGFloat height = MIN(self.view.bounds.size.height, self.tableView.contentSize.height);
    self.dynamicTVHeight.constant = height;
    [self.view layoutIfNeeded];
}

Cela devrait résoudre votre problème.

Mise à jour Vous pouvez omettre l'étape 2) comme Xcode automatiquement favorise la contrainte pour l'utilisateur contrainte lorsque vous créez un exutoire pour elle.

C'est un lien vers un exemple de projet qui fait ce que vous voulez. Le télécharger et de le tester avec Xcode 5. Il devrait fonctionner.

https://github.com/jcatalan007/TestTableviewAutolayout

Pour Xcode 5 regarder dans la documentation de la façon dont vous pouvez accéder à la contrainte dans Interface Builder.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X