Est-il possible de changer la hauteur de UIPickerView? Certaines applications semblent avoir des PickerViews plus courts, mais la définition d'un cadre plus petit ne semble pas fonctionner et le cadre est verrouillé dans Interface Builder.
ios
iphone
cocoa-touch
uikit
uipickerview
Steven Canfield
la source
la source
Réponses:
Il semble évident qu'Apple n'invite pas particulièrement le déblayage avec la hauteur par défaut du
UIPickerView
, mais j'ai constaté que vous pouvez obtenir un changement de hauteur de la vue en prenant le contrôle complet et en passant une taille d'image souhaitée au moment de la création, par exemple:smallerPicker = [[UIPickerView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 120.0)];
Vous découvrirez qu'à différentes hauteurs et largeurs, il y a des problèmes visuels. De toute évidence, ces problèmes devraient être résolus d'une manière ou d'une autre, ou choisir une autre taille qui ne les présente pas.
la source
Aucune des approches ci-dessus ne fonctionne sous iOS 4.0
La hauteur du pickerView n'est plus redimensionnable. Il y a un message qui est sauvegardé dans la console si vous essayez de changer le cadre d'un sélecteur dans 4.0:
J'ai fini par faire quelque chose d'assez radical pour obtenir l'effet d'un sélecteur plus petit qui fonctionne à la fois sous OS 3.xx et OS 4.0. J'ai laissé le sélecteur à la taille que le SDK décide qu'il devrait être et j'ai plutôt créé une fenêtre transparente coupée sur mon image d'arrière-plan à travers laquelle le sélecteur devient visible. Ensuite, placez simplement le sélecteur derrière (ordre Z) mon arrière-plan UIImageView afin que seule une partie du sélecteur soit visible, ce qui est dicté par la fenêtre transparente dans mon arrière-plan.
la source
Il n'y a que trois hauteurs valides pour
UIPickerView (162.0, 180.0 and 216.0)
.Vous pouvez utiliser les fonctions
CGAffineTransformMakeTranslation
etCGAffineTransformMakeScale
pour adapter correctement le sélecteur à votre convenance.Exemple:
Le code ci-dessus modifie la hauteur de la vue du sélecteur à la moitié et la repositionne à la position exacte (Left-x1, Top-y1) .
la source
Essayer:
la source
Dans iOS 4.2 et 4.3, les travaux suivants:
Ce qui suit ne fonctionne pas:
J'ai une application qui est dans l'App Store avec un sélecteur de date à 3 lignes. Je pensais que le changement de hauteur avait peut-être été évité car vous voyez le texte sous la bordure du sélecteur de date, mais cela arrive également au sélecteur de date normal de 216 hauteurs.
Quel est le bug? Votre estimation est aussi bonne que la mienne.
Il existe également 3 hauteurs valides pour
UIDatePicker
(etUIPickerView
) 162,0, 180,0 et 216,0. Si vous définissez uneUIPickerView
hauteur sur autre chose, vous verrez ce qui suit dans la console lors du débogage sur un appareil iOS.la source
À partir d'iOS 9, vous pouvez modifier librement
UIPickerView
la largeur et la hauteur. Pas besoin d'utiliser les hacks de transformation mentionnés ci-dessus.la source
J'ai trouvé que vous pouvez modifier la taille de UIPickerView - mais pas avec le constructeur d'interface. ouvrez le fichier .xib avec un éditeur de texte et définissez la taille de la vue du sélecteur sur ce que vous voulez. Le constructeur d'interface ne réinitialise pas la taille et semble fonctionner. Je suis sûr qu'Apple a verrouillé la taille pour une raison, vous devrez donc expérimenter différentes tailles pour voir ce qui fonctionne.
la source
Avantages:
UIPickerView
se comporte comme il se doitUIViewController
viewWillLayoutSubviews
pour redimensionner / positionner leUIPickerView
UIPopover
Désavantages:
UIPickerView
pickerView viewForRow
pour annuler la transformation des sous-vuesSolution:
Sous-classe UIPickerView et remplacez les deux méthodes à l'aide du code suivant. Il combine le sous-classement, la hauteur fixe et l'approche de transformation.
la source
Un moyen simple de modifier la hauteur visible d'une vue de sélecteur consiste à incorporer le sélecteur dans un UIView, à ajuster la hauteur de la vue parente à la hauteur que vous voulez voir du sélecteur, puis à activer "Sous-vues de clip" dans Interface Builder sur l'UIView parent ou défini
view.clipsToBounds = true
dans le code.la source
Clip Subviews
. aussi la taille duUIPickerView
doit être plus grand - et vous devez viser le centre de votreUIPickerView
pour être visible à l'intérieur du parentUIView
UIPickerView
partir du code).Je n'ai pu suivre aucun des conseils ci-dessus.
J'ai regardé plusieurs tutoriels et j'ai trouvé celui- ci le plus bénéfique:
J'ai ajouté le code suivant pour définir la nouvelle hauteur dans la méthode "viewDidLoad", qui fonctionnait dans mon application.
J'espère que cela a été utile!
la source
Cela a beaucoup changé dans iOS 9 (dans iOS 8, c'est assez similaire à ce que nous voyons ici). Si vous pouvez vous permettre de cibler uniquement iOS 9, vous redimensionnez le
UIPickerView
comme bon vous semble, en définissant son cadre. Bien!Le voici à partir des notes de publication d' iOS 9
la source
Je travaille avec ios 7, Xcode 5. J'ai pu ajuster la hauteur du sélecteur de date indirectement en l'enfermant dans une vue. La hauteur des vues du conteneur peut être ajustée.
la source
Créez une vue dans IB ou code. Ajoutez votre sélecteur en tant que sous-vue de cette vue. Redimensionnez la vue. C'est plus facile à faire dans IB. Créez des contraintes de la vue à sa vue de supervision et du sélecteur à cette nouvelle vue.
Étant donné que le sélecteur se courbe autour, il se répand en haut et en bas de la vue. Vous pouvez voir dans IB lorsque vous ajoutez des contraintes du haut et du bas du sélecteur à la vue, il affiche un espace standard quelque chose comme 16 points au-dessus et en dessous du conteneur superview. Réglez la vue pour la couper si vous ne voulez pas ce comportement (horrible avertissement).
Voici à quoi cela ressemble à 96 points de haut sur un iPhone 5. Le sélecteur avec le débordement mesure environ 130 points de haut. Assez maigre!
J'utilise ceci dans mon projet pour empêcher le sélecteur de s'étendre à une hauteur inutile. Cette technique le réduit et force un débordement plus serré. Il semble en fait plus lisse d'être un peu plus compact.
Voici une image de la vue montrant le débordement.
Voici les contraintes IB que j'ai ajoutées.
la source
Même s'il n'est pas redimensionné, une autre astuce peut aider dans le cas où l'UIPicker est situé en bas de l'écran.
On peut essayer de le déplacer légèrement vers le bas, mais la rangée centrale doit rester visible. Cela aidera à révéler un peu d'espace au-dessus du sélecteur car les lignes du bas seront hors écran.
Je répète que ce n'est pas la manière de changer la hauteur de la vue UIPicker mais une idée de ce que vous pouvez faire si toutes les autres tentatives échouent.
la source
Ok, après avoir longtemps lutté avec le stupide pickerview sous iOS 4, j'ai décidé de changer mon contrôle en simple tableau: voici le code:
Voici le fichier .h pour cela:
c'est tout, il ne reste plus qu'à créer une variable membre dans la vue combobox qui contiendra la sélection de ligne actuelle, et nous sommes prêts à partir.
Profitez de tout le monde.
la source
Vous ne pouvez généralement pas le faire dans xib ou définir le cadre par programme, mais si vous ouvrez son xib parent en tant que source et changez la hauteur à partir de là, cela fonctionne.Cliquez droit sur le xib dans lequel la vue de sélection est contenue, recherchez la vue de la sélection et vous pouvez trouver la hauteur, la largeur, etc. dans cette balise, modifiez la hauteur puis enregistrez le fichier.
la source
Autant que je sache, il est impossible de réduire le UIPickerView. Je n'ai pas non plus vu de version plus courte utilisée nulle part. Je suppose que c'était une implémentation personnalisée s'ils réussissaient à la réduire.
la source
Si vous souhaitez créer votre sélecteur dans IB, vous pouvez le post-redimensionner à une taille plus petite. Assurez-vous cependant qu'il dessine toujours correctement, car il arrive un moment où cela semble odieux.
la source
Swift : vous devez ajouter une sous-vue avec un clip aux limites
Cela devrait ajouter un sélecteur de date tronqué de 100 hauteurs en haut du contrôleur de vue.
la source
Mon truc: utilisez le calque de masque de datepicker pour rendre visible une partie de datePicker. comme vous le voyez, changez le cadre du datepicke.
la source
J'utilise un calque de masque pour changer sa taille d'affichage
la source
Incorporer dans une vue de pile. La vue Stack est un composant récemment ajouté par Apple dans son SDK iOS pour refléter les implémentations basées sur la grille dans les bibliothèques frontales basées sur le Web de script java telles que bootstrap.
la source
Comme mentionné ci-dessus, il
UIPickerView
est désormais redimensionnable. Je veux juste ajouter que si vous souhaitez modifier la hauteur du sélecteurView dans une cellule tableView, je n'ai pas réussi à définir l'ancre de hauteur sur une constante. Cependant, l'utilisationlessThanOrEqualToConstant
semble fonctionner.la source
Après une longue journée à me gratter la tête, j'ai trouvé quelque chose qui fonctionne pour moi. Les codes ci-dessous recréeront l'UIDatePicker chaque fois que l'utilisateur changera l'orientation du téléphone. Cela supprimera tous les problèmes que l'UIDatePicker a après un changement d'orientation.
Puisque nous recréons l'UIDatePicker, nous avons besoin d'une variable d'instance qui conservera la valeur de date sélectionnée. Les codes ci-dessous sont testés sur iOS 4.0.
la source
Si vous souhaitez définir la taille de UiPickerView. Le code ci-dessus fonctionnera sûrement pour vous.
la source
Dans iOS 5.0, les éléments suivants fonctionnent:
Cela a créé un sélecteur de date comme celui qu'Apple utilise dans l'application Calendrier lors de la création d'un nouvel événement en mode paysage. (3 lignes de haut au lieu de 5.) Cela n'a pas fonctionné lorsque j'ai défini le cadre dans la
initWithFrame:
méthode, mais fonctionne jusqu'à présent lorsque vous le définissez en utilisant une méthode distincte.la source
pour iOS 5:
si vous jetez un coup d'œil au protocole UIPickerView Référence
tu trouveras
Je pense que c'est le premier que vous recherchez
la source
pickerView:rowHeightForComponent:
est la méthode déléguée pour décider de la hauteur de chaque ligne et non de la hauteur de la vue du sélecteur.