2012-03-22 8 views
7

Ho aggiunto un testo molto grande a UItextView. Il mio offset iniziale è -55. Quindi ho fatto scorrere fino alla fine di UITextView. Il mio offset è 406.Non capisco perfettamente scrollRectToVisible quando sto usando contentInset

Quindi ho chiamato scrollToZero. Il mio offset è -55. Ho chiamato di nuovo scrollToZero e il mio offset è 0. Perché scrollToZero è così imprevedibile? Non capisco perché offset è cambiato quando ho cliccato di nuovo.

-(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); 
} 

risposta

8

Ho combattuto proprio questo problema. Sono convinto che si tratti di un bug nella classe UIScrollView, non vedo altre spiegazioni.

Per prima cosa imposta i tuoi riquadri su zero, chiama scrollRectToVisible: animated :, quindi ripristina i tuoi riquadri. Importa solo se lo scroll-to rect è 'left of' il rect corrente. 'right of' funziona come previsto.

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

Ho appena realizzato che ho solo inserti a sinistra, e forse se li avevo a destra questo problema sarebbe verificarsi anche durante lo scorrimento di un rettangolo che è proprio fuori il rettangolo corrente. – emp

+0

Sono d'accordo con te. Questo è probabilmente un bug. – Voloda2

+0

Che cos'è scrollDelta qui? –