example ios interface-builder uipickerview picker

ios - example - ¿Cómo reducir un UIPickerView en el iPhone?



uipickerview swift 4 example (5)

¡Es posible y fácil!

Simplemente abra el archivo de plumilla como texto sin formato, luego busque la vista del selector y ajuste las medidas:

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

¡Eso es todo!

Me gustaría reducir la altura de un UIPickerView en mi aplicación de iPhone, para que muestre solo una fila y una columna. La altura de la vista del selector debe ser igual a la altura de una fila.

Estoy usando Interface Builder para construir el UIPickerView , pero no puedo encontrar una manera fácil de redimensionar este control.

¿Cómo reducir un UIPickerView ?


Crear un UIView simple en Interface Builder. Establecer la posición y el tamaño deseados, añadir restricciones. Marque la casilla de verificación "Clip SubViews". Luego arrastre y suelte la Vista del selector dentro de esta vista como una subvista. Agregue restricciones para que el selector se alinee horizontal y verticalmente dentro del contenedor. Debería hacer el trabajo.


En realidad, puede reducir ligeramente todo el UIPickerView aplicando una transformación afín a una vista envolvente. Por ejemplo:

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];

escalará un selector a un 75% de su tamaño original colocándolo dentro de una vista contenedora y aplicando una transformación de escala a esa vista. La aplicación de una transformación directamente a UIPickerView conduce a artefactos de dibujo no deseados.

Sin embargo, el tipo de cambio de tamaño que está buscando se serviría mejor creando un control personalizado.


La respuesta de user2248258 realmente funciona si usa guiones gráficos y / o autolayout. Allí me gustaría agregar capturas de pantalla como sugirió Nilambar.

  1. coloque una vista de recogida en otra vista de contenedor con el tamaño que desee

  2. Revisa las vistas de clip para la vista del contenedor

  3. alinee el selector centrado horizontalmente y verticalmente en esa vista de contenedor, también déle cero restricciones para el lugar final y final

De esta manera, la vista del selector se recorta al tamaño correcto (no se cambiará el tamaño).

Resultado:


Por lo que sé, se estropeará si lo contraes.

a) UITableView+UIPickerView
Le recomiendo que use "una fila en UITableView+UIPickerView para hacer esto. Puede usar una fila en tableView como el dropDownList en Windows, cuando toque en esta fila se mostrará el pickerView (oculto al principio).

b) Si tiene una larga lista de datos en tableView y solo uno de los elementos necesita seleccionar datos, debe desplazarse por la vista utilizando el siguiente método (asegúrese de calcular la posición original de pickerView ya que se moverá hacia arriba / abajo) juntos):

-(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) También puede agregar otra vista para el selector y volver a esta vista cuando haya seleccionado algo.

Mi conclusión es:
Si solo tiene unas pocas líneas en tableView, use a.
Si tiene muchas líneas en tableView pero solo una de ellas necesita un selector, use b.
Si tiene muchas líneas en tableView y muchas de ellas necesitan un selector, use c.