当我使用 contentInset 时,我不完全理解 scrollRectToVisible
Posted
技术标签:
【中文标题】当我使用 contentInset 时,我不完全理解 scrollRectToVisible【英文标题】:I don't fully understand scrollRectToVisible when I'm using contentInset 【发布时间】:2012-03-22 10:42:28 【问题描述】:我向 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】:我一直在与这个问题作斗争。我确信这是 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];
【讨论】:
我刚刚意识到我只有左边的插图,如果我把它们放在右边,也许当滚动到当前矩形外的一个矩形时也会出现这个问题。 scrollDelta 只是在 x 轴上滚动的一些量。我不记得上下文,但任何有效的目标偏移都应该这样做。 我在使用UICollectionView
时遇到了类似的问题,即在使用scrollRectToVisible
时更改了插图。我通过在scrollRectToVisible
调用之后设置contentInset
来解决它,如this answer中所述。看起来很像一个错误。以上是关于当我使用 contentInset 时,我不完全理解 scrollRectToVisible的主要内容,如果未能解决你的问题,请参考以下文章
在出现键盘时处理 tableView contentInset
UIRefreshControl 不以 contentInset 集为中心