gpt4 book ai didi

ios - 如果不拉动刷新,则强制 UIScrollView 始终以 CGPointZero 结束

转载 作者:行者123 更新时间:2023-11-29 04:49:34 26 4
gpt4 key购买 nike

我有一个包含内容的 UIView,并且正在实现拉动刷新功能。 如何将 UIScrollView 配置为始终反弹到 contentOffset 0,0(并使其看起来自然)?

我见过很多使用 UITable View 执行此操作的示例,并且下拉刷新行为相当低。我的问题似乎是内容大小较大,无法容纳隐藏的“拉动刷新”横幅。如果我向下滚动内容,它会重新向上滚动。如果我向上拉内容,它会缓慢地向下滚动,但不会滚动到相同的确切位置。

我已经实现了以下函数,它将检测 ScrollView 是否正在滚动。然后它将 View 重新定位回 0,0。这种方法可行,但看起来很跳跃或动画有滞后。

- (void)scrollViewDidScroll:(UIScrollView *)scrollView;
{
if(moveScrollView)
[moveScrollView invalidate];

moveScrollView = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(moveScrollViewToOrigin) userInfo:nil repeats:NO];
}

- (void)moveScrollViewToOrigin;
{
if(scrollView.contentOffset.y == 0)
return;

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.2];
[[self scrollView] setContentOffset:CGPointZero];
[UIView commitAnimations];
}

我创建了一个包含问题和解决方案的示例项目 here.

最佳答案

向下拉内容时,滚动位置的行为似乎与预期一致。当屏幕最初加载时,下拉刷新横幅隐藏在顶部,并且您将内容向上推。内容并不总是能回到应有的程度。有时,当它完成弹跳时,y的偏移量是40。这都可以通过我发布的示例代码进行验证。

由于问题仅限于允许 contentOffset.y 大于零,因此我决定禁用该行为。我将以下内容放入 (void)scrollViewDidScroll:(UIScrollView *)scrollingView;

if(scrollingView.contentOffset.y > 0){
//content is moving up and the Refresh banner is already hidden

//disable scrolling
[[self scrollView] setScrollEnabled:NO];

//move content back to origin, do not animate
CGRect originBounds = self.scrollView.bounds;
originBounds.origin.y = 0.0f;
[[self scrollView] scrollRectToVisible:originBounds animated:NO];

}else
{
[[self scrollView] setScrollEnabled:YES];
}

关于ios - 如果不拉动刷新,则强制 UIScrollView 始终以 CGPointZero 结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9073126/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com