2010-01-07 21 views
23

Tengo un UIScrollView que creo y tamaño dinámicamente usando ...UIScrollView no mostrar el indicador de desplazamiento

scrollView.contentSize = CGSizeMake(scrollView.frame.size.width , length); 

Luego agregar subviews a la UIScrollView. Tengo scrollView.showsVerticalScrollIndicator = YES;

Al desplazarse, el indicador de desplazamiento nunca aparece.

Incluso si llamo al [scrollView flashScrollIndicators] no pasa nada.

Ideas?

+0

Me parece bien. Claro que no lo estás estableciendo en otro lugar a NO? –

Respuesta

66

tenía el mismo problema y no podía encontrar la causa. La última respuesta dio la última pista: cada vez que añadía nuevas subvistas, primero eliminaba todas las subvistas existentes de la vista de desplazamiento (y aparentemente también los indicadores de desplazamiento).

Después de comprobar en mi lazo, si la subvista realmente era del tipo que quería ser eliminado los indicadores de desplazamiento se presentaron:

for (NSObject * subview in [[[scrollView subviews] copy] autorelease]) { 
    if ([subview isKindOfClass:[MySubView class]]) { 
     [(MySubView*)subview removeFromSuperview]; 
    } 
} 

Actualización: se ha cambiado el código a la sugerencia de Nikolai

+2

Hay un error sutil en este código: el método 'subviews 'de UIView devuelve la matriz original de subvistas utilizadas por la vista. Esto significa que el código anterior muta la matriz mientras itera sobre ella. Solución fácil: iterar sobre '[[[subvistas de scrollView] copiar] liberación automática]' –

+0

wow ... esta respuesta resuelve 2 errores a la vez :) gracias: D –

+0

Esta es la solución perfecta, gracias – RVN

0

Noté esto cuando el UIScrollView era una banda horizontal de 48 px de altura, desplazable horizontalmente. Quizás Cocoa decida que el área es demasiado pequeña para un indicador de desplazamiento ...

+0

En este caso, la vista de desplazamiento es varias veces la longitud de la pantalla y exactamente el ancho de la pantalla. – George

14

Cuando he tratado esto antes, en mi implementación de una cuadrícula, ocasionalmente obtengo algunas celdas sobre el indicador de desplazamiento. Para solucionar esto, ahora estoy insertando subvistas en el índice 0 en lugar de agregarlas, lo que las agrega a la parte superior. Así que trate de algo como esto:

[scrollview insertSubview:subview atIndex:0];

+0

¿Alguna posibilidad de una solución similar para un 'UICollectionView'? – rounak

1

También sucede (al menos en el caso de una UITableView) si el tamaño del contenido es demasiado pequeño para que la vista de tabla se desplace. Si ha habilitado el rebote, entonces la vista de tabla no se desplaza y no muestra los indicadores, por lo tanto. Prueba a poner más contenido dentro.

8

puedo solucionar este problema mediante la adición de este código después de añadir nueva subvista:

self.showsVerticalScrollIndicator = NO; 
self.showsVerticalScrollIndicator = YES; 
+0

Esto y el contenido que cubría mis indicadores era la raíz del problema con el que me encontré. – jbierling

2

Puede ocurrir también si el padre de la ScrollView es más pequeño horizontalmente que el propio punto de vista de desplazamiento:

El rollo la barra está pegada al lado derecho de ScrollView/TableView y este lado derecho no está visible debido a los límites principales (con clipToBounds ocultándolo, por ejemplo).

He visto este problema, así que lo comparto en caso de que pueda ayudar.

Simplemente compruebe que el ancho del marco de su ScrollView no sea mayor que el ancho de su marco de vista principal.

10

Para mí, el indicador horizontal había desaparecido misteriosamente en mi aplicación en iOS 7. Más tarde descubrí que por alguna extraña razón, tenía que habilitar tanto Shows Horizontal Indicator como Shows Vertical Indicator para que apareciera la horizontal. Si lo configuré para que no muestre el indicador vertical, tampoco mostraría el indicador horizontal.

enter image description here

+1

Suspiro ... primeros problemas del mundo iOS7. Esto solucionó mi problema. –

0

dos condiciones,

  1. Si está utilizando un guión gráfico
  2. Si está utilizando un UITableView dentro de un UIViewController

Entonces, usted debe revisar sus inserciones indicador están configurados en 0 (o cualquier otro número que sea relevante para su autodiseño):

enter image description here

Cuestiones relacionadas