2012-03-22 6 views
7

UItextViewに非常に大きなテキストを追加しました。私の初期オフセットは-55です。その後、私はUITextViewの一番下までスクロールしました。私のオフセットは406です。contentInsetを使用しているときにscrollRectToVisibleを完全に理解していません

私はscrollToZeroを呼び出しました。私のオフセットは-55です。私はscrollToZeroをもう一度呼び、オフセットは0です。なぜscrollToZeroは予測できないのですか?私は、私が再びクリックしたときに、なぜオフセットが変わったのかを疑うことはない。

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

答えて

8

私はこの非常に問題を抱えています。私はこれがUIScrollViewクラスのバグだと確信しています。他の説明はありません。

最初にインセットをゼロに設定し、scrollRectToVisible:animated:を呼び出して、インセットを復元します。スクロール先の矩形が現在の矩形の「左」にある場合のみ重要です。 「権利」は期待通りに機能します。

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

私はちょうど私が唯一の左のインセットを持っている、と私は右の上でそれらを持っていたかもしれない場合は右の現在の長方形オフでRECTにスクロールしたとき、この問題が発生することを実現しました。 – emp

+0

私はあなたに同意します。おそらくバグです。 – Voloda2

+0

ここではscrollDeltaとは何ですか? –

関連する問題