Question

Je voudrais réduire la hauteur d'un UIPickerView dans mon application iPhone, de sorte qu'il ne montre qu'une seule ligne et une colonne. La hauteur du point de vue du sélecteur doit être égale à la hauteur d'une ligne.

J'utilise Interface Builder pour construire le UIPickerView, mais je ne peux pas trouver un moyen facile de redimensionner ce contrôle.

Comment un psy UIPickerView?

Était-ce utile?

La solution

En fait, vous pouvez légèrement rétrécir l'ensemble UIPickerView en appliquant une transformation affine à une vue englobante. Par exemple:

CGSize pickerSize = [pickerView sizeThatFits:CGSizeZero];

pickerTransformView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, pickerSize.width, pickerSize.height)];
pickerTransformView.transform = CGAffineTransformMakeScale(0.75f, 0.75f);

[pickerTransformView addSubview:pickerView];
[self.view addSubview:pickerTransformView];
[pickerTransformView release];

est l'échelle d'un sélecteur à 75% de sa taille d'origine en le plaçant dans une vue contenant et appliquer une mise à l'échelle de transformation à ce point de vue. En appliquant une transformation directement au UIPickerView conduit à des artefacts de dessin indésirables.

Cependant, le type de redimensionnement que vous cherchez serait mieux servi en créant un contrôle personnalisé.

Autres conseils

Il est possible et facile!

Il suffit d'ouvrir le fichier nib sous forme de texte, puis trouver le point de vue de sélecteur et d'ajuster les mesures:

<object class="IBUIPickerView" id="783900772">
<reference key="NSNextResponder" ref="191373211"/>
<int key="NSvFlags">292</int>
<string key="NSFrame">{{85, 68}, {150, 116}}</string>

C'est tout!

Créer simple UIView dans Interface Builder. Régler la position désirée et la taille, ajouter des contraintes. Cochez la case "subviews Clip". Ensuite, faites glisser-déposer Picker Voir dans ce point de vue comme une sous-vue. Ajoutez des contraintes pour sélecteur pour aligner l'intérieur du conteneur horizontalement et verticalement. Devrait faire le travail.

La réponse de user2248258 fonctionne en fait, si vous utilisez storyboards et / ou autolayout. Là, je voudrais ajouter des captures d'écran comme le suggère Nilambar.

  1. placer une pickerview dans une autre vue de récipient avec la taille que vous voulez Placer une pickerview dans une autre vue conteneur

  2. vérifier clipSubviews pour la vue conteneur

  3. aligner le sélecteur centrée horizontalement et verticalement dans cette position de récipient, également donner zéro contraintes du lieu arrière et avant

De cette façon, le point de vue du sélecteur se clipser au large à la taille correcte (ne sera pas redimensionnée).

Résultat: entrer la description d'image ici

Pour autant que je sache, il sera foiré si vous le rétrécir.

a) UITableView+UIPickerView
Je vous recommande d'utiliser la « une ligne UITableView+UIPickerView de le faire. Vous pouvez utiliser une ligne dans tableView comme le DROPDOWNLIST dans Windows, lorsque vous appuyez sur cette ligne affiche le pickerView (caché dans un premier temps).

b) Si vous avez une longue liste de données dans tableView et que l'un des éléments a besoin de choisir des données, vous devez faire défiler l'affichage à l'aide de la méthode suivante (assurez-vous de calculer la position initiale de pickerView car il sera déplacé vers le haut / bas ensemble) :


-(void)setViewMove:(BOOL)moveUP offset:(CGFloat)offset
{
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.3];
    CGRect rect = self.view.frame;

    if(moveUP)
    {
        rect.origin.y-=offset;
        rect.size.height+=offset;
    }
    else    //move down
    {
        rect.origin.y+=offset;
        rect.size.height-=offset;
    }
    self.view.frame = rect;
    [UIView commitAnimations];
}

c) Vous pouvez également ajouter une autre vue du sélecteur et revenir à ce point de vue lorsque vous avez sélectionné quelque chose.

Ma conclusion est:
Si vous ne disposez que de quelques lignes dans tableView, utilisez un.
Si vous avez beaucoup de lignes tableView mais seulement l'un d'entre eux Préparateur besoins, utilisation b.
Si vous avez beaucoup de lignes dans tableView et beaucoup d'entre eux ont besoin picker, utilisez c.

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