当我使用contentInset时,我不完全理解scrollRectToVisible

时间:2012-03-22 10:42:29

标签: ios uiscrollview uitextview

我在UItextView中添加了非常大的文本。我的初始偏移是-55。然后我滚动到UITextView的底部。我的偏移是406。

然后我调用了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);
}

1 个答案:

答案 0 :(得分:8)

我一直在与这个问题作斗争。我确信这是UIScrollView类中的一个错误,我看不到其他解释。

首先将您的insets设置为零,调用scrollRectToVisible:animated:,然后恢复您的insets。只有滚动到矩形是当前矩形的“左侧”才有意义。 '权利'按预期运作。

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];
}