como - IOS7 UIPickerVer cómo ocultar el indicador de selección
como ocultar aplicaciones en ios 10 (14)
¿Cómo puedo ocultar esas 2 líneas en la fila seleccionada?
En base a las otras respuestas, decidí enumerar las subvistas y vi que las líneas tienen una altura de 0.5
por lo que mi solución ahora se ve así en Swift:
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
pickerView.subviews.forEach({
$0.hidden = $0.frame.height < 1.0
})
return myRowCount
}
Y en Objective-C
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
[pickerView.subviews enumerateObjectsUsingBlock:^(UIView *subview, NSUInteger idx, BOOL *stop) {
subview.hidden = (CGRectGetHeight(subview.frame) < 1.0)
}];
return myRowCount
}
Obviamente no es particularmente a prueba de futuro, pero probablemente más que ocultar una subvista en un índice dado.
Editar: actualizado para manejar el caso proporcionado por @Loris
En ios7 no podemos ocultar la línea separada en UIPickerView y podemos saberlo desde esta página: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIPickerView_Class/index.html#//apple_ref/occ/instm/UIPickerView/showsSelectionIndicator
Pero podemos agregar dos UIViews para cubrirlo y el ancho de dos UIViews es 1. Algunos ejemplos de código aquí:
s_leftLine = [[UIView alloc] initWithFrame:CGRectMake(s_pickerView.frame.size.height/2,
s_pickerView.frame.size.width/2 - kWidthOfPickerPage/2 + 1,
1,
s_pickerView.frame.size.height)];
s_leftLine.backgroundColor = [UIColor whiteColor];
s_leftLine.layer.zPosition = s_pickerView.layer.zPosition + 1; // make sure the line is on the top
[s_pickerView addSubview:s_leftLine];
Ok, esto será mucho mejor:] si alguien tiene una mejor respuesta solo escríbela para compartir :)
En la configuración de iOS7, el parámetro pickerview.showsSelectionIndicator no tiene ningún efecto, según la documentación ( https://developer.apple.com/library/ios/documentation/userexperience/conceptual/UIKitUICatalog/UIPickerView.html ).
Sin embargo, como UIPickerView al final es una UIView con subvistas, verifiqué qué subvistas había. Encontré 3, el primero contenía todos los componentes de UIPickerView, y los otros dos son las dos líneas.
Así que al establecer el segundo y el tercero (índice 1 y 2) ocultos, las dos líneas se eliminaron.
[[pickerview.subviews objectAtIndex:1] setHidden:TRUE];
[[pickerview.subviews objectAtIndex:2] setHidden:TRUE];
No es una solución realmente buena, y definitivamente no es compatible con versiones anteriores, pero por ahora hace el trabajo. Espero que esto ayude.
Está funcionando antes de ios7.
pickerView.showsSelectionIndicator = NO;
para más información en ios7 ver este documento
Este código funciona bien para iOS 10 con swift 3
Simplemente agregue este código en su clase de controlador de vista.
override func viewDidLayoutSubviews() {
timePickerView.subviews[1].isHidden = true
timePickerView.subviews[2].isHidden = true
}
Esto funcionó para mí en Swift en iOS 9 Beta.
datePicker.subviews[0].subviews[1].hidden = true
datePicker.subviews[0].subviews[2].hidden = true
Esto se logra fácilmente. Simplemente coloque su PickerView dentro de un ScrollView con el tamaño deseado de su fila, y use el método delegate selector (pickerView: rowHeightForComponent :) para cambiar la altura de la fila del selector a un poco más grande que su ScrollView. De esa manera, las líneas estarán ocultas.
Lo resolví con un simple truco: colocar la vista del selector en una vista y establecer las subvistas del clip como propiedad de esta vista = verdadera. Ahora, simplemente configure la altura de la fila en la vista del selector = altura de la vista del contenedor, entonces la línea desaparecerá.
Opté por un enfoque diferente para hacerlo un poco más a prueba de futuro, en caso de que Apple decida cambiar algo más adelante
for subview in setPickerView.subviews{
if subview.frame.origin.y != 0{
subview.isHidden = true
}
}
ya que la ubicación de origen (subvista que contiene los elementos) es 0, entonces puedo ocultar cualquier cosa sin poner en riesgo un error de índice fuera de límites
Disfrutar
EDITAR: ¡Olvidé decirte que lo puse en el método viewDidLayoutSubviews!
Simplemente escriba este código en su método viewdidload
[[PickerView.subviews objectAtIndex:1] setHidden:TRUE];
[[PickerView.subviews objectAtIndex:2] setHidden:TRUE];
Swift 3 Version (trabajo):
pickerView.subviews[1].isHidden = true
pickerView.subviews[2].isHidden = true
También puede hacer una extensión a UIPickerView:
extension UIPickerView {
func hideSelectionIndicator() {
for i in [1, 2] {
self.subviews[i].isHidden = true
}
}
}
Y luego simplemente llame a myPickerView.hideSelectionIndicator()
para cada PickerView que desee modificar.
[[pickerview.subviews objectAtIndex:1] setHidden:TRUE];
[[pickerview.subviews objectAtIndex:2] setHidden:TRUE];
Use esto en el método de delegado viewForRow
o viewForRow
de pickerView
.
func numberOfComponents(in pickerView: UIPickerView) -> Int
{
pickerView.subviews.forEach({
$0.isHidden = $0.frame.height < 1.0
})
return 1
}