Question

J'ai un UITableView qui n'est pas redimensionnée correctement à l'aide autoresizeMask (dans l'iPhone 3.0).

Le UITableView est à l'intérieur d'un UIViewController l'intérieur d'un UINavigationController intérieur d'un UITabBarController, qui sont tous en cours de création par programmation. La barre d'état est visible.

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];
}

Lors de sa création comme celui-ci, le UITableView est légèrement plus grand que l'espace disponible. Si je ne me trompe pas, il est exactement 44 pixels plus gros, la taille de la barre de navigation.

Cependant, si je décommenter la ligne commentée et commenter la ligne suivante la taille de la UITableView est tout à fait exact. Je préférerais utiliser autoresizingMask au lieu de calculer manuellement la taille de la UITableView. Qu'est-ce que je fais mal?

Merci d'avance!

Était-ce utile?

La solution

Le problème semble être que je ne déclenchaient pas le cadre de la vue racine dans loadview. Si vous définissez ce cadre, puis définir le cadre des sous-vues par rapport à ce cadre, alors les masques de AutoResize seront correctement redimensionner les sous-vues selon la façon dont a été redimensionnée la vue racine par le cadre.

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.

Autres conseils

Le masque de Autoresizing ne vous aidera pas à la taille initiale de l'affichage du tableau. La vue de table est créée avec le cadre que vous lui donnez. Le masque Autoresizing définit les règles de redimensionnement ce cadre par rapport à la vue parent lorsque les changements d'image du parent.

Donc, si je définis une table qui est 320x100, il reste que la taille à moins que je change explicitement ou les modifications du cadre de vue parent.

En fonction des autres vues, vous pouvez faire le calcul sur la base des autres vues détenues par la société mère ou par le cadre du parent lui-même.

Créer UIViewController sous-classe Instand de UITableViewController sous-classe.

insérer par exemple UITableView.

NIB simplement glisser-déposer UIView

au-dessus de ce lieu de Wier l'objet uitableview existant.

définir la taille de la pointe par l'intermédiaire d'uitableview ou méthode viewDidLoad.

définir

la référence, dataSource et délégué via nib.

le simple transfert de la classe UIViewController et peut changer la taille de tableview que vous le souhaitez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top