¿Es posible cambiar la altura de UIPickerView? Algunas aplicaciones parecen tener PickerViews más cortos, pero establecer un marco más pequeño no parece funcionar y el marco está bloqueado en Interface Builder.
ios
iphone
cocoa-touch
uikit
uipickerview
Steven Canfield
fuente
fuente
Respuestas:
Parece obvio que Apple no invita particularmente a limpiar con la altura predeterminada de la
UIPickerView
, pero he descubierto que puede lograr un cambio en la altura de la vista tomando el control completo y pasando un tamaño de fotograma deseado en el momento de la creación, por ejemplo:smallerPicker = [[UIPickerView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 120.0)];
Descubrirá que en varias alturas y anchos, hay fallas visuales. Obviamente, estos fallos tendrían que solucionarse de alguna manera o elegir otro tamaño que no los presente.
fuente
Ninguno de los enfoques anteriores funciona en iOS 4.0
La altura de pickerView ya no es redimensionable. Hay un mensaje que se descarga a la consola si intenta cambiar el marco de un selector en 4.0:
Terminé haciendo algo bastante radical para obtener el efecto de un selector más pequeño que funciona tanto en OS 3.xx como en OS 4.0. Dejé que el selector tuviera el tamaño que el SDK decida que debería ser y, en su lugar, hice una ventana transparente de corte en mi imagen de fondo a través de la cual el selector se vuelve visible. Luego, simplemente coloque el selector detrás (orden Z) de mi UIImageView de fondo para que solo una parte del selector sea visible, lo que está dictado por la ventana transparente en mi fondo.
fuente
Solo hay tres alturas válidas para
UIPickerView (162.0, 180.0 and 216.0)
.Puede utilizar las funciones
CGAffineTransformMakeTranslation
yCGAffineTransformMakeScale
para ajustar correctamente el selector a su conveniencia.Ejemplo:
El código anterior cambia la altura de la vista del selector a la mitad y la vuelve a colocar en la posición exacta (Izquierda-x1, Arriba-y1) .
fuente
Tratar:
fuente
En iOS 4.2 y 4.3 funciona lo siguiente:
Lo siguiente no funciona:
Tengo una aplicación que está en la tienda de aplicaciones con un selector de fecha de 3 líneas. Pensé que el cambio de altura podría haberse evitado porque ve el texto debajo del borde del selector de fecha, pero esto también le sucede al selector de fecha de altura 216 normal.
Cual es el error? Tu invitado es tan bueno como el mío.
También hay 3 alturas válidas para
UIDatePicker
(yUIPickerView
) 162.0, 180.0 y 216.0. Si establece unaUIPickerView
altura para cualquier otra cosa, verá lo siguiente en la consola al depurar en un dispositivo iOS.fuente
A partir de iOS 9, puede cambiar libremente
UIPickerView
el ancho y el alto. No es necesario utilizar los trucos de transformación mencionados anteriormente.fuente
Descubrí que puede editar el tamaño de UIPickerView, pero no con el generador de interfaces. abra el archivo .xib con un editor de texto y establezca el tamaño de la vista del selector como desee. El generador de interfaces no restablece el tamaño y parece funcionar. Estoy seguro de que Apple bloqueó el tamaño por una razón, así que tendrás que experimentar con diferentes tamaños para ver qué funciona.
fuente
Ventajas:
UIPickerView
comporte como deberíaUIViewController
viewWillLayoutSubviews
para cambiar la escala / posicionarUIPickerView
UIPopover
Desventajas:
UIPickerView
pickerView viewForRow
para deshacer la transformación de las subVistasSolución:
Subclase UIPickerView y sobrescriba los dos métodos usando el siguiente código. Combina subclases, altura fija y el enfoque de transformación.
fuente
Una manera fácil de cambiar la altura visible de una vista de selector es incrustar el selector en una vista UIView, ajustar la altura de la vista principal a la altura que desea ver del selector y luego habilitar "Subvistas de clip" en Interface Builder en la vista UIView principal o establecido
view.clipsToBounds = true
en código.fuente
Clip Subviews
. también el tamaño delUIPickerView
debe ser más alto, y debe apuntar el centro de suUIPickerView
para que sea visible dentro del padreUIView
UIPickerView
partir del código).No pude seguir ninguno de los consejos anteriores.
Vi varios tutoriales y encontré este el más beneficioso:
Agregué el siguiente código para establecer la nueva altura dentro del método "viewDidLoad", que funcionó en mi aplicación.
¡Espero que esto haya sido útil!
fuente
Esto ha cambiado mucho en iOS 9 (en iOS 8 es bastante similar a lo que estamos viendo aquí). Si puede permitirse apuntar solo a iOS 9, cambie el tamaño del
UIPickerView
como mejor le parezca, configurando su marco. ¡Bueno!Aquí está de las notas de la versión de iOS 9
fuente
Estoy trabajando con ios 7, Xcode 5. Pude ajustar la altura del selector de fecha indirectamente encerrándolo en una vista. La altura de las vistas del contenedor se puede ajustar.
fuente
Cree una vista en IB o código. Agregue su selector como una subvista de esta vista. Cambiar el tamaño de la vista. Esto es más fácil de hacer en IB. Cree restricciones desde la vista a su supervista y desde el selector a esta nueva vista.
Dado que el selector se curva a su alrededor, se extiende por la parte superior e inferior de la vista. Puede ver en IB cuando agrega restricciones superior e inferior desde el selector a la vista, muestra un espacio estándar de algo así como 16 puntos por encima y por debajo del contenedor de supervista. Configure la vista para recortarla si no desea este comportamiento (advertencia fea).
Así es como se ve a 96 puntos de altura en un iPhone 5. El selector con el desbordamiento tiene aproximadamente 130 puntos de altura. ¡Bastante flaco!
Estoy usando esto en mi proyecto para evitar que el selector se extienda a una altura innecesaria. Esta técnica lo recorta y fuerza un derrame más apretado. En realidad, parece más elegante para ser un poco más compacto.
Aquí hay una imagen de la vista que muestra el desbordamiento.
Aquí están las restricciones de IB que agregué.
fuente
Incluso aunque no esté cambiando el tamaño, otro truco puede ayudar en la situación en la que el UIPicker se encuentra en la parte inferior de la pantalla.
Se puede intentar moverlo ligeramente hacia abajo, pero la fila central debe permanecer visible. Esto ayudará a revelar algo de espacio sobre el selector, ya que las filas inferiores estarán fuera de la pantalla.
Repito que esta no es la forma de cambiar la altura de la vista de UIPicker, sino una idea de lo que puede hacer si todos los demás intentos fallan.
fuente
Ok, después de luchar durante mucho tiempo con la estúpida vista del selector en iOS 4, he decidido cambiar mi control a una tabla simple: aquí está el código:
Aquí está el archivo .h para eso:
eso es todo, ahora lo único que queda es crear una variable miembro en la vista del cuadro combinado que contendrá la selección de fila actual, y estamos listos para comenzar.
Disfruten a todos.
fuente
Por lo general, no puede hacerlo en xib o configurar el marco programáticamente, pero si abre su xib principal como fuente y cambia la altura desde allí, entonces funciona. en esa etiqueta, cambie la altura allí y luego guarde el archivo.
fuente
Hasta donde yo sé, es imposible encoger el UIPickerView. Tampoco he visto uno más corto usado en ninguna parte. Supongo que fue una implementación personalizada si lograron reducirla.
fuente
Si desea crear su selector en IB, puede redimensionarlo posteriormente a un tamaño más pequeño. Sin embargo, asegúrese de que todavía se dibuja correctamente, ya que llega un punto en el que se ve atroz.
fuente
Swift : debe agregar una subvista con clip a límites
Esto debería agregar un selector de fecha recortado de 100 alturas en la parte superior del controlador de vista.
fuente
Mi truco: use la capa de máscara de datepicker para hacer que datePicker sea visible en alguna parte. como ves, como cambiar el marco del datepicke.
fuente
Uso una capa de máscara para cambiar su tamaño de visualización
fuente
Incrustar en una vista de pila. La vista de pila es un componente agregado recientemente por Apple en su SDK de iOS para reflejar implementaciones basadas en cuadrículas en bibliotecas frontales basadas en web de scripts java, como bootstrap.
fuente
Como se mencionó anteriormente,
UIPickerView
ahora es redimensionable. Sin embargo, solo quiero agregar que si desea cambiar la altura de pickerView en una celda de tableView, no tuve ningún éxito al establecer el ancla de altura en una constante. Sin embargo, el usolessThanOrEqualToConstant
parece funcionar.fuente
Después de un largo día de rascarme la cabeza, encontré algo que funciona para mí. Los códigos a continuación volverán a crear el UIDatePicker cada vez que el usuario cambie la orientación del teléfono. Esto eliminará cualquier problema técnico que tenga el UIDatePicker después de un cambio de orientación.
Dado que estamos recreando el UIDatePicker, necesitamos una variable de instancia que mantendrá el valor de fecha seleccionado. Los siguientes códigos se prueban en iOS 4.0.
fuente
Si desea establecer el tamaño de UiPickerView. El código anterior seguramente funcionará para ti.
fuente
En iOS 5.0, conseguí que funcionara lo siguiente:
Esto creó un selector de fecha como el que usa Apple en la aplicación Calendario al crear un nuevo evento en modo horizontal. (3 filas de altura en lugar de 5.) Esto no funcionó cuando configuré el marco dentro del
initWithFrame:
método, pero hasta ahora funciona cuando lo configuré usando un método separado.fuente
para iOS 5:
si echa un vistazo rápido al protocolo UIPickerView Referencia
encontrarás
Creo que es el primero que estás buscando
fuente
pickerView:rowHeightForComponent:
es el método delegado para decidir la altura de cada fila, no la altura de la vista del selector.