Comment changer UIPickerView hauteur
Est-il possible de modifier la hauteur de UIPickerView? Certaines applications semblent avoir moins d'PickerViews mais la définition d'un cadre plus petit ne semble pas fonctionner et le cadre est enfermé dans Interface Builder.
- Réponses supplémentaires peuvent être trouvés dans une question similaire: comment faire pour réduire le sélecteur de vue de l'iPhone? .
- stackoverflow.com/questions/965375/...
Vous devez vous connecter pour publier un commentaire.
Il semble évident qu'Apple n'est pas tout à inviter le marinage avec la hauteur par défaut de la
UIPickerView
, mais j'ai trouvé que vous pouvez obtenir un changement dans la hauteur du point de vue en prenant le contrôle complet et le passage d'un cadre de la taille au moment de la création, de l'e.g:smallerPicker = [[UIPickerView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 120.0)];
Vous découvrirez que, à différentes hauteurs et largeurs, il y a visual pépins. Évidemment, ces pépins aurait besoin d'être travaillé autour d'une certaine manière, ou choisissez une autre taille qui ne présentent pas entre eux.
Aucune de ces approches dans iOS 4.0
La pickerView de hauteur n'est plus re-extensible. Il y a un message qui devient l'objet de dumping sur la console si vous essayez de changer l'image d'un sélecteur dans la version 4.0:
J'ai fini par faire quelque chose d'assez radical pour obtenir l'effet d'un petit sélecteur de ce qui fonctionne dans les deux OS 3.xx et OS 4.0. J'ai quitté le sélecteur à n'importe quelle taille que le SDK décide qu'il devrait être et au lieu de faire une découpe travers la fenêtre transparente sur mon image d'arrière-plan à travers lequel le sélecteur devient visible. Alors tout simplement placé le sélecteur de derrière (Z Ordre sage) mon fond UIImageView de sorte que seule une partie du plateau est visible ce qui est dicté par la fenêtre transparente de mon fond.
Il y a seulement trois valide hauteurs pour
UIPickerView (162.0, 180.0 and 216.0)
.Vous pouvez utiliser le
CGAffineTransformMakeTranslation
etCGAffineTransformMakeScale
fonctions pour ajuster correctement le sélecteur à votre convenance.Exemple:
Le code ci-dessus de changer la hauteur de vue de sélecteur de la moitié et de la position exacte de (à Gauche x1, Haut-y1) position.
Essayer:
Dans l'iOS 4.2 & 4.3 les ouvrages suivants:
Le code suivant ne fonctionne pas:
J'ai une application dans l'app store avec une 3 ligne de sélecteur de date. Je pensais que le changement de hauteur de aurait pu être évitée parce que vous voyez le texte sous le sélecteur de date à la frontière, mais ce qui se passe à la normale 216 hauteur de sélecteur de date trop.
Qui est le bug? Votre supposition est aussi bonne que la mienne.
Aussi il y a 3 valide hauteurs pour
UIDatePicker
(etUIPickerView
) 162.0, 180.0, et 216.0. Si vous définissez unUIPickerView
hauteur à quoi que ce soit d'autre, vous verrez le texte suivant dans la console lors du débogage sur un appareil iOS.Comme de l'iOS 9, vous pouvez changer librement
UIPickerView
's de largeur et de hauteur. Pas besoin d'utiliser le ci-dessus mentionné transformer hacks.J'ai trouvé que vous peut modifier la taille de la UIPickerView - mais pas avec interface builder. ouvert le .xib fichier avec un éditeur de texte et de définir la taille de la vue de sélecteur de ce que vous voulez. Interface builder ne pas réinitialiser la taille et il semble fonctionner. Je suis sûr que apple a verrouillé la taille pour une raison que de sorte que vous aurez à expérimenter avec différentes tailles pour voir ce qui fonctionne.
Avantages:
UIPickerView
se comporter comme il se doitUIViewController
viewWillLayoutSubviews
de le redimensionner/position de laUIPickerView
UIPopover
Inconvénients:
UIPickerView
pickerView viewForRow
pour annuler la transformation de la sous-vuesSolution:
Sous-classe UIPickerView et remplacer les deux méthodes en utilisant le code suivant. Il combine le sous-classement, à hauteur fixe et l'approche de la transformation.
Un moyen facile de changer la hauteur visible d'un sélecteur de vue consiste à incorporer le sélecteur dans une UIView, ajuster la vue parent de la hauteur à la hauteur que vous voulez voir du sélecteur, puis activer "Clip des sous-vues" dans Interface Builder sur le parent UIView ou un ensemble
view.clipsToBounds = true
dans le code.Clip Subviews
. aussi de la taille de laUIPickerView
doit être plus grand - et vous devez viser le centre de votreUIPickerView
pour être visible à l'intérieur de la mèreUIView
UIPickerView
du code).Je n'étais pas en mesure de suivre les conseils ci-dessus.
J'ai regardé plusieurs tutos et trouvé cette l'un des plus bénéfiques:
J'ai ajouté le code suivant pour définir la nouvelle hauteur à l'intérieur de la "viewDidLoad" la méthode, qui a travaillé dans mon app.
Espère que cela a été utile!
Cela a changé beaucoup de choses dans iOS 9 (dans iOS 8 il est assez similaire à ce que nous voyons ici). Si vous pouvez vous permettre de cibler iOS 9 seulement, alors vous redimensionnez la
UIPickerView
comme bon vous semble, en définissant son cadre. Bon!Ici c'est à partir de iOS 9 Release Notes
Je suis en train de travailler avec ios 7, Xcode 5. J'ai été en mesure de régler la hauteur de sélecteur de date indirectement par l'enfermer dans une vue. Le conteneur vues hauteur peut être ajustée.
Même pensé qu'il n'est pas le redimensionnement, une autre astuce peut aider dans la situation lorsque le UIPicker est situé au bas de l'écran.
On peut essayer de le déplacer légèrement vers le bas, mais la ligne doit rester visible. Cela permettra de révéler l'espace au-dessus du sélecteur de depuis rangées d'en bas seront à l'écran.
Je répète que ce n'est pas le moyen de changer de UIPicker vue de la hauteur, mais une idée sur ce que vous pouvez faire si toutes les autres tentatives échouent.
Ok, après avoir lutté pendant une longue période avec la stupide pickerview dans iOS 4, j'ai décidé de changer mon contrôle en tableau simple:
voici le code:
Ici est la .h fichier:
qui est, maintenant, la seule chose qui reste est de créer une variable de membre dans la zone de liste déroulante mode d'affichage courant de sélection d'une ligne, et nous êtes bon pour aller.
Profiter tout le monde.
Vous ne pouvez généralement le faire dans xib ou de réglage de l'image programtically mais si vous ouvrez son parent xib comme source et modifier la hauteur à partir de là, alors il fonctionne.Cliquez-droit sur le xib au sein de laquelle pickerview est contenue,Recherche pickerview et vous pouvez trouver la hauteur,la largeur, etc dans cette balise,Changer la hauteur de là, puis enregistrer le fichier.
Créer une vue de l'IB ou code. Ajouter votre sélecteur comme une sous-vue de ce point de vue. Redimensionner l'affichage. C'est le plus facile à faire au bureau de l'IB. Créer des contraintes à partir de la vue de son superview et à partir du sélecteur de ce nouveau point de vue.
Depuis le Sélecteur de courbes autour d'elle se renverse sur le haut et le bas de la vue. Vous pouvez le voir dans l'IB lorsque vous ajoutez en haut et en bas des contraintes à partir du sélecteur de la vue montre une norme de l'espace de quelque chose comme 16 points au-dessus et au-dessous de la superview conteneur. La vue à couper, si vous ne voulez pas ce comportement (laid avertissement).
Voici à quoi ça ressemble à 96 points de haut sur un iPhone 5. Le sélecteur avec le débordement est d'environ 130 points de haut. Assez maigre!
J'utilise dans mon projet pour éviter le sélecteur de se propager à une inutile de hauteur. Cette technique garnitures et les forces d'un resserrement de la déborder. Il semble effectivement carde d'être un peu plus compact.
Voici une image de la vue montrant les retombées.
Voici l'IB contraintes ai-je ajouté.
Autant que je sache, il est impossible de réduire la UIPickerView. J'ai aussi n'avez pas vu un plus court utilisé n'importe où. Je pense que ce était une coutume de la mise en œuvre s'ils ont réussi à la réduire.
Voir ma réponse à cette question: UIPicker dimensionnement en mode paysage
Si vous souhaitez créer votre sélecteur de l'IB, vous pouvez post-redimensionner à une taille plus petite. Assurez-vous qu'il attire toujours correctement, même si, comme il arrive un moment où il semble odieux.
Swift: Vous devez ajouter une sous-vue avec clip de limites
Cela doit ajouter un coupées 100 hauteur sélecteur de date dans le haut de la vue-contrôleur.
Mon truc: utiliser datepicker du calque de masque à faire datePicker une partie visible. comme vous le voyez comme changer la datepicke cadre.
- Je utiliser un masque de calque pour modifier la taille d'affichage
Intégrer dans une vue de la pile. Vue de la pile est un composant ajouté récemment par Apple dans iOS SDK pour refléter la grille en fonction des implémentations en java script basé sur le web avant la fin de bibliothèques comme bootstrap.
Comme mentionné ci-dessus
UIPickerView
est maintenant redimensionnable. Je veux juste ajouter que si vous voulez changer le pickerView de la hauteur dans un tableView Cellule, je n'ai pas de succès avec réglage de la hauteur du point d'ancrage à une constante. Cependant, l'utilisation delessThanOrEqualToConstant
semble fonctionner.Après une longue journée de me gratter la tête, j'ai trouvé quelque chose qui fonctionne pour moi. Les codes ci-dessous va recréer le UIDatePicker chaque fois que l'utilisateur de changer l'orientation du téléphone. Cela permettra d'éliminer tout ce problèmes que les UIDatePicker après un changement d'orientation.
Puisque nous sommes en recréant l'UIDatePicker, nous avons besoin d'une variable d'instance qui gardera le choix de la date de valeur. Les codes ci-dessous sont testés sur iOS 4.0.
Si Vous voulez définir la taille de UiPickerView. Code ci-dessus est certainement va travailler pour u.
Dans iOS 5.0, j'ai obtenu à la suite de travaux:
Cela a créé un sélecteur de date comme celle d'Apple utilise dans l'application Calendrier lors de la création d'un nouvel événement dans le paysage de la mode. (3 lignes de haut au lieu de 5.) Cela n'a pas fonctionné lorsque j'ai mis l'image au sein de l'
initWithFrame:
méthode, mais pour l'instant fonctionne lors de la configuration à l'aide d'une méthode distincte.pour iOS 5:
si vous prenez un coup d'oeil rapide à la UIPickerView Protocole Référence
vous trouverez
Je pense que c'est le premier que vous êtes à la recherche pour
pickerView:rowHeightForComponent:
est le délégué de la méthode pour décider de la hauteur de chaque ligne - pas à la hauteur de la vue du sélecteur.