2010-11-26 29 views
0

J'ai remarqué quelque chose qui n'a jamais été un problème auparavant. J'ai fait un projet pour iPad où j'ai utilisé plusieurs UIPickerView placés côte à côte, horizontalement. Ici, ils respectent le cadre CGRect que je les initialise, ce qui signifie que placer d'autres éléments de chaque côté d'eux n'était pas un problème.UIPickerView prend tout l'espace horizontal sur l'iPhone, mais pas sur iPad?

Maintenant j'essaye de faire ceci sur un projet d'iPhone et ici un UIPickerView insiste pour être le seul élément. Il se dimensionne lui-même pour remplir l'écran horizontalement, avec les graphiques "autour".

J'ai essayé différentes approches, placez le UIPickerView à l'intérieur d'une vue différente puis dimensionnez cette super vue, qui conduit juste à un écrêtage, pas à un redimensionnement. Une autre chose est que le UIPicker insiste pour être placé au centre de l'écran. Cela signifie essentiellement que lorsqu'un UIPickerView est ajouté à l'écran, même si son composant unique n'a que 70 px de large, ces 320 px de l'écran sont épuisés. Ce que j'essaie d'accomplir est d'avoir un UIPicker sur le côté droit de l'écran et un bouton à gauche de celui-ci. Est-ce que je regarde quelque chose d'évident ici? L'espoir que quelqu'un pourrait donner un coup de main, merci à l'avance :)

Rien de plus compliqué que cela:

UIView *container = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 250.0f, 165.0f)]; 

UIPickerView *picker = [[UIPickerView alloc] initWithFrame:container.frame]; 
[picker setDelegate:self]; 
[picker setDataSource:self]; 
[container addSubview:picker]; 

le cadre que je mets, n'est pas respecté. Il prend tout l'espace horizontal.

Répondre

1

J'ai essayé votre code avec le même résultat. Cependant, vous pouvez définir le cadre après que le sélecteur a été créé et ajouté à votre conteneur, et la nouvelle taille est respectée. Voici mon cas de test qui fonctionne pour moi en utilisant SDK 4.2, dans le simulateur iPhone:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    UIPickerView* pv = [[[UIPickerView alloc] initWithFrame: CGRectMake(160, 100, 100, 216) ] autorelease]; 
    pv.delegate = self; 
    pv.dataSource = self; 
    [self.view addSubview: pv]; 

    pv.frame = CGRectMake(10, 10, 100, 216); 
} 
+0

Salut Tom, vous avez raison, j'obtenir le même résultat en ajoutant d'abord la UIPicker (UIPickerView * sélecteur = [[UIPickerView alloc ] initWithFrame: CGRectZero];) sans cadre, puis définissant le cadre après que le sélecteur a été ajouté à une vue. Je vous remercie:) – RickiG