2010-10-21 2 views
0

J'ai sous-classé UITableViewController et l'ai appelé FeaturedGamesViewController. Ok, j'ai aussi un contrôleur de navigation auquel j'ai ajouté ce FeaturedGamesViewController en tant que root. Tout ce que vous faites dans l'App Delegate.Comment redimensionner l'interface utilisateur Table View d'une interface utilisateur Table View Controller par programme?

Notez également qu'il n'y a aucun fichier NIB créé pour FeaturedGamesViewController. Le simple fait de sous-classer UITableViewController et d'appeler initWithStyle définit le style de la table et définit la source de données et la délègue automatiquement. La source de données et le délégué sont évidemment définis sur FeaturedGamesViewController.

- (id)init 

{//
Appelez le initialiseur de superclasse désigné [super initWithStyle: UITableViewStyleGrouped];

}

OK, vous voyez que j'ai définir la taille de la table à "Regroupées". En vue Paysage sur mon iPad il y a environ 20 pixels d'espace en haut, à gauche et à droite (Désolé, je ne peux pas poster une capture d'écran car je suis nouveau ici et le système ne me laissera pas jusqu'à ce que j'ai accumulé un certain nombre de points

Je ne veux pas ça! C'est Landscape donc je m'attends à ce qu'il remplisse tout l'espace entre la barre de navigation et la barre d'onglets ci-dessous. Ce qui est pire, c'est que j'ai truqué une grille avec un UITableViewCell personnalisé mais l'espace à gauche et à droite fait en sorte que si vous cliquez sur cet espace, la ligne entière est sélectionnée trahissant ainsi le sentiment qu'il s'agit d'une grille.

Maintenant, je pense que je devrais redimensionner la vue de la table dans viewDidLoad ou quelque chose, mais je ne sais pas comment. Je ne peux pas faire initWithFrame en raison de fuites de mémoire potentielles (et éventuellement en réinitialisant les propriétés dataSource et delegate et autoresizeMask déjà définies). Il doit donc y avoir un setter ou quelque chose pour redéfinir l'origine de la tableview juste sous la barre de navigation. écran avec la taille 1024X748. Comment faites-vous dynamiquement réinitialiser la taille de la vue de la table? Puis je suis devenu très frustré et j'ai décidé de le faire via un fichier Nib, de cette façon je peux définir l'orientation du paysage et définir des barres de navigation et tabulation simulées et remplir le reste de l'espace avec la vue de la table. Cela a fonctionné! Si vous êtes curieux de savoir comment créer une vue de table avec un Nib après avoir sous-classé UITableViewController SANS nib, voici comment:

http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/TableView_iPhone/CreateConfigureTableView/CreateConfigureTableView.html#//apple_ref/doc/uid/TP40007451-CH6-SW10

Aller au paragraphe juste avant « Création d'une table Voir Programmatically ». OK, quand je l'ai fait, ma vue paysage de la "grille" a rempli tout l'espace entre la barre de navigation en haut et la barre d'onglets en bas comme je le voulais. Je bidouillais avec ça un peu plus et j'ai découvert que dans ma version "non nib" (celle qui pose problème), j'avais mis le style de table à "groupé". Quand je l'ai changé en "plaine", ça a marché !!! Mais voici la chose cependant: Dans la version nib, "groupé" ou "plain" donne la mise en page correcte avec la table occupant tout l'espace. Alors qu'est-ce qui donne?

Désolé pour la longue question, mais je suppose que ce que je demande est:

1) Comment réinitialiser programmation la taille de l'affichage du tableau sans introduire éventuelles fuites de mémoire ou affecter d'autres propriétés déjà définies pour vous (ex : dataSource, delegate, autoResizeMask - ils sont définis pour vous simplement parce que vous avez sous-classé UITableViewController)?

2) Comment faites-vous cela pour n'importe quelle vue en général?

3) Pourquoi le style "plain" remplit-il la mise en page comme souhaité tandis que le style "groupé" donne la mise en page bizarre. Notez que ce n'est pas un problème dans la version Nib.

Merci pour votre patience!

Répondre

0

de réponse pour (2), et donc pour (1):

cadre est un UIView est dans un système de coordonnées local de son superview. Une façon courante de faire une vue adapter son superview est

CGRect bounds = [[self superview] bounds]; 
[self setFrame:bounds]; 

Vous devez le faire à l'intérieur layoutSubviews.

+0

Vous pouvez uniquement dessiner des éléments dans layoutSubviews si vous avez une vue personnalisée (ou c'est ce que je pense). Je n'ai pas de vue personnalisée. J'ai sous-classé UITableViewController donc je n'ai accès qu'aux méthodes loadView, viewDidLoad et autres. J'ai essayé de le faire dans viewDidLoad et ça n'a pas marché. Je devrais mentionner que j'ai un contrôleur de vue d'étiquette, qui tient un ptr à un contrôleur de navigation pour chaque étiquette. Et ces contrôleurs de navigation ont mon UITableViewController personnalisé en tant que root! Mauvais: http://fumpr.com/share-6083_4CBFB8F3.html Bon: http://fumpr.com/share-58A4_4CBFB9AE.html – user482393

Questions connexes