2012-03-22 8 views
7

Agregué texto muy grande a UItextView. Mi compensación inicial es -55. Luego me desplacé al final de UITextView. Mi desplazamiento es 406.No entiendo completamente scrollRectToVisible cuando estoy usando contentInset

Luego llamé a scrollToZero. Mi compensación es -55. Llamé a scrollToZero nuevamente y mi compensación es 0. ¿Por qué scrollToZero es tan impredecible? No entiendo por qué el desplazamiento cambió cuando hice clic de nuevo.

-(void) viewDidLoad 
{ 
[super viewDidLoad]; 
textView.text = @"Very big text"; 
textView.contentInset = UIEdgeInsetsMake(55.0, 0, 0, 0); 
[textView scrollRectToVisible:CGRectMake(0,0,1,1) animated:NO]; 
} 

-(IBAction) scrollToZero:(id)sender 
{ 
[textView scrollRectToVisible:CGRectMake(0, 0, textView.frame.size.width, textView.frame.size.height) animated:NO]; 
} 
-(IBAction) onLog:(id)sender 
{ 
NSLog(@"___content offset %f", textView.contentOffset.y); 
} 

Respuesta

8

He estado batallando con este problema. Estoy convencido de que esto es un error en la clase UIScrollView, no veo otra explicación.

Primero configure las inserciones en cero, llame a scrollRectToVisible: animated :, y luego restaure las inserciones. Solo importa si el scroll-to rect está 'a la izquierda' del rect actual. 'derecho de' funciona como se esperaba.

CGRect rect = self.scrollView.bounds; 
CGRect scrollToRect = CGRectOffset(rect, scrollDelta, 0); 

if (CGRectIsLeftOfRect(scrollToRect, rect)) { 
    UIEdgeInsets insets = self.carouselView.contentInset; 
    self.scrollView.contentInset = UIEdgeInsetsZero; 
    [self.scrollView scrollRectToVisible:scrollToRect animated:animated]; 
    self.scrollView.contentInset = insets; 
} else { 
    [self.scrollView scrollRectToVisible:scrollToRect animated:animated]; 
} 
+0

Me acabo de dar cuenta que sólo tengo inserciones a la izquierda, y tal vez si los tuviera a la derecha de este problema también se produciría cuando se desplaza a un rect que está justo al lado del rectángulo actual. – emp

+0

Estoy de acuerdo contigo. Esto es probablemente un error. – Voloda2

+0

¿Qué es scrollDelta aquí? –

Cuestiones relacionadas