我在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);
}
答案 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];
}