1

J'ai un UITableView qui n'est pas redimensionné correctement en utilisant autoresizeMask (dans iPhone 3.0). Le UITableView est à l'intérieur d'un UIViewController à l'intérieur d'un UINavigationController à l'intérieur d'un UITabBarController, qui sont tous créés par programmation. La barre d'état est visible.Mauvaise taille de UITableView en utilisant autoresizingMask

Le code du UIViewController est essentiellement:

- (void)loadView { 
    UIView* rootView = [[UIView alloc] init]; 
    self.view = rootView; 
    [rootView release]; 
} 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    // table = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 480-20-49-44)]; 
    table = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 100)]; table.autoresizingMask = UIViewAutoresizingFlexibleHeight; 
    [self.view addSubview:table]; 
} 

Une fois créé comme celui-ci, le UITableView est légèrement plus grand que l'espace disponible. Si je ne me trompe pas, c'est exactement 44 pixels de plus, la taille de la barre de navigation. Toutefois, si je ne commente pas la ligne commentée et commente la ligne suivante, la taille de UITableView est exactement correcte. Je préférerais utiliser autoresizingMask au lieu de calculer manuellement la taille de UITableView. Qu'est-ce que je fais mal?

Merci d'avance!

Répondre

2

Le problème semble être que je ne définissais pas le cadre de la vue racine dans loadView. Si vous définissez ce cadre, puis définissez le cadre des sous-vues par rapport à cette image, les masques d'autoresize redimensionneront correctement les sous-vues en fonction de la manière dont la vue racine a été redimensionnée par l'infrastructure.

Par exemple:

- (void)loadView { 
    UIView* rootView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)]; 
    self.view = rootView; 
    [rootView release]; 
} 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    table = [[UITableView alloc] initWithFrame:self.view.frame]; 
    table.autoresizingMask = UIViewAutoresizingFlexibleHeight; 
    [self.view addSubview:table]; 
} 

Merci à Colin Gislason qui m'a orienté dans la bonne direction.

1

Le masque d'autoresizing ne vous aidera pas avec la taille initiale de la vue de table. La vue de la table est créée avec le cadre que vous lui donnez. Le masque d'autoresizing définit les règles de redimensionnement de cette image par rapport à la vue parent lorsque l'image du parent change. Donc, si je définis une table de 320 x 100, elle restera à cette taille à moins que je ne la modifie explicitement ou que l'image de la vue parente change. En fonction des autres vues, vous pouvez effectuer le calcul en fonction des autres vues détenues par le parent ou par le cadre du parent lui-même.

+0

Merci pour la réponse rapide, Colin. Le masque autoresizing fait quelque chose. La vue de la table est en cours de création avec une taille de 320x100, et pourtant elle remplit tout l'écran. Je peux changer de 100 à 200 et la taille sera la même. – hpique

+0

Et si vous ne définissez pas un masque autoresizing tout en le réglant sur 320x100, cela ne remplit pas tout l'écran? –

+0

C'est vrai. En l'absence de masque automatique, la vue de la table est dimensionnée en fonction du cadre. – hpique

0

Créer l'instance de sous-classe UIViewController de la sous-classe UITableViewController.

insérez l'instance UITableView.

dans NIB simplement glisser-déposer UIView

sur ce lieu de Wier l'objet uitableview existant.

Définissez la taille de uitableview via la méthode nib ou viewDidLoad.

Définissez la référence, dataSource et déléguez via nib.

maintenant il suffit de transférer la classe UIViewController et le peut changer la taille de la table comme vous le souhaitez.

+0

Cela fonctionne-t-il? avec des vues de table statiques? – Claus

+0

salut Claus, je l'essaie avec un contenu dynamique. mais cela fonctionnera avec du contenu statique ... – damithH

Questions connexes