2010-12-18 15 views
5

He la UIScrollView con pagingEnabled establece en Sí, y mediante programación desplácese su contenido a abajo:UIScrollView: rollos de tomas individuales que al principio de la

CGPoint contentOffset = scrollView.contentOffset; 
contentOffset.y = scrollView.contentSize.height - scrollView.frame.size.height; 
[scrollView setContentOffset:contentOffset animated:YES]; 

se desplaza con éxito, pero después de eso, en un solo toque sus rollos de contenido hasta compensar que tiene justo antes de que se desplace hacia abajo. Eso sucede solo cuando programáticamente desplazo el contenido de scrollViewView a la parte inferior y luego toco. Cuando me desplazo a cualquier otro desplazamiento y luego toco, no pasa nada.

Eso definitivamente no es lo que me gustaría obtener. ¿Cómo debería ser arreglado?

Muchas gracias de antemano!

Timur.

Respuesta

0

Cuando se desplaza un ScrollView se recomienda usar

[scrollView scrollRectToVisible:CGRectMake(0,0,1,1) animated:YES];

Cuando el rect es la posición que está buscando. (En este caso, el rect sería la parte superior de la vista de desplazamiento).

Cambiar el desplazamiento de contenido no es la forma correcta de desplazarse por una vista de desplazamiento.

+0

En otra nota, tal vez malinterpreté la pregunta: D – Accatyyc

+0

Accatyyc, gracias por su respuesta. Reemplacé setContentOffset: con scrollRectToVisible: call apropiado, pero desafortunadamente no solucionó el problema. – indexless

3

La solución siguiente hizo ayuda (suponiendo que uno se extiende UIScrollView con una categoría, así 'self' se refiere a su instancia):

-(BOOL) scrolledToBottom 
{ 
    return (self.contentSize.height <= self.frame.size.height) || 
      (self.contentOffset.y == self.contentSize.height - self.frame.size.height); 
} 

Entonces, uno a veces debe girar pagingEnabled fuera, justo en la posición donde la vista de desplazamiento llega a su parte inferior. En el delegado (pagingEnabled es initialy sobre por supuesto, ya que el problema se produce sólo cuando está activado):

-(void) scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    if (scrollView.pagingEnabled == YES) 
    { 
     if ([scrollView scrolledToBottom] == YES) 
      scrollView.pagingEnabled = NO; 
    } 
    else 
    { 
     if ([scrollView scrolledToBottom] == NO) 
      scrollView.pagingEnabled = YES; 
    } 
} 
+0

¡Gracias! He simplificado el código para mi caso (desplazarse a la derecha) a solo una línea. Compruebe mi respuesta a continuación :) – Tomasz

4

simplemente me di cuenta de lo que causa este problema y cómo evitarlo. Si tiene pagingEnabled establecido en SÍ en una vista de desplazamiento, debe configurar contentOffset para que sea un múltiplo del tamaño visible de la vista de desplazamiento (es decir, debe estar en un límite de paginación).

Ejemplo concreto:

Si su punto de vista de desplazamiento era (digamos) 460 píxeles de alto con un área de contenido de 920, que tendría que establecer el contenido de desplazamiento a 0 o 460, si se quiere evitar el "scroll al comienzo del grifo "problema".

Como una ventaja, el resultado final probablemente se verá mejor ya que su vista de desplazamiento se alineará con los límites de búsqueda. :)

+0

wlach, gracias! Pero cuando tienes contenido con altura que no es múltiplo de la altura del marco, no obtendrás un comportamiento correcto, ¿verdad? :) – indexless

+0

No estoy seguro, pero ¿por qué habilitaría la paginación si el contenido no es un múltiplo de la altura del cuadro? – wlach

5

Este pequeño hack impide que UIScrollView se desplace cuando se toca. Parece que esto está sucediendo cuando la vista de desplazamiento tiene la paginación habilitada.

En su delegado UIScrollView añadir este método:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView { 
    scrollView.pagingEnabled = self.scrollView.contentOffset.x < (self.scrollView.contentSize.width - self.scrollView.frame.size.width); 
} 

Esto desactiva la paginación cuando la vista de desplazamiento alcanza el extremo derecho de desplazamiento horizontal (mi caso de uso, se puede adaptar a otras direcciones fácilmente).

Cuestiones relacionadas