2010-07-19 7 views
5

Je souhaite afficher un UIButton dans le pied de page UITableView (devrait être exactement le même pour l'en-tête).UITableView tableFooterView redimensionnement bizarre

Ce code est dans le viewDidLoad de mon TableViewController:

UIButton *footerShareButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
[footerShareButton setFrame:CGRectMake(10, 0, 70, 50)]; 
NSLog(@"%f", footerShareButton.frame.size.width); 

[self.tableView setTableFooterView:footerShareButton]; 

NSLog(@"%f", footerShareButton.frame.size.width); 
NSLog(@"%f", self.tableView.tableFooterView.frame.size.width); 

Cependant, ce code ne fonctionne pas. La largeur du bouton est beaucoup trop grande, elle est de 320. (La hauteur est correcte cependant.) Les premières sorties NSLog 70, la deuxième et la troisième sortie 320. Il semble donc que la méthode setTableFooterView redimensionne étrangement le bouton.

J'ai résolu ce problème en mettant l'UIButton dans un autre UIView avant de le placer comme le pied de la table:

UIButton *footerShareButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
[footerShareButton setFrame:CGRectMake(10, 0, 70, 50)]; 

UIView *aView = [[UIView alloc] initWithFrame:CGRectMake(10, 0, 70, 50)]; 
[aView addSubview:footerShareButton]; 

[self.tableView setTableFooterView:aView]; 
[aView release]; 

Cela fonctionne, le bouton a la bonne largeur.

Cependant, je ne comprends pas pourquoi le premier exemple de code ne fonctionne pas. Quelqu'un peut-il expliquer?

Répondre

19

Quelle que soit la largeur que vous définissez pour la vue que vous ajoutez en tant que pied de page/en-tête UITableView, sa largeur sera toujours la même que celle de la table. Par conséquent, dans votre cas, la vue que vous avez ajoutée est redimensionnée à CGRectMake(0, 0, 320, 50), mais le bouton reste avec le bon cadre. Le cadre de bouton est selon le point de vue ...

EDIT:
Le seul paramètre dans le cadre de pied de/en-tête qui reste que vous définissez est la hauteur.

Notez que si vous modifiez la hauteur de la vue d'en-tête/pied de page après qu'elle a été ajoutée à la table, elle ne fera aucun changement. Vous devriez régler la hauteur avant de l'ajouter à la table ...

+2

Eh oui, voilà, il ne redimensionne le point de vue que j'ai créé aussi, je n'ai pas remarqué. Je vous remercie. Je pense qu'il devrait être mentionné dans les documents que la définition de la propriété tableFooterView redimensionne la vue, cela m'aurait permis de gagner du temps. – avf

3

Il y a effectivement un moyen que j'ai trouvé en essayant de surmonter ce problème;

Créez un UIView 320x vide (la hauteur de votre bouton), puis placez le bouton au centre de cette vue contenant. De cette façon, le bouton à l'intérieur de la vue ne sera pas redimensionné.

Hope this helps,

Jonathan