iOS下拉刷新 UIScrollVie异常闪动问题
发布时间 - 2026-01-10 23:22:57 点击率:次据说是在IOS8之后,但是我是在iOS10中遇到的问题,之前使用的下拉刷新可能会抖一下,在滑动很快的时候 在下拉松开后,scrollView即将回到“刷新中…”的状态过程中的时候。

抖动的原因:
ScrollViewDidEndDragging => setContentInset:
为了保证在“Loading”的状态下,下拉刷新控件可以展示,我们对contentInset做了修改,增加了inset的top. 那这样一步操作为什么会导致scrollView抖动一下呢。
我在scrollViewDidScroll:中打了个断点,来看看在setContentInset:之后发生了什么事情。 我设置的inset.top = 64; 结果发现scrollView的contentOffset发生了这样的变化:
(0, -64) => (0, -133) => (0, -64)
由以上数据可以看出,contentOffset在这个过程中先被向下移动了一段,再回归正常。 猜测问题原因:
下拉松开之后, scrollView本身的 bounce 效果 与 当前设置inset冲突了
初步尝试: async
知道问题的原因后,我第一思路是避开这个冲突,于是我把 setContentInset: 的方法异步调用一下:
dispatch_async(dispatch_get_main_queue(), ^{
[UIView animateWithDuration:kAnimationDuration animations:^{
self.scrollView.contentInset = inset;
} completion:^(BOOL finished) {
}];
});
尝试了一下,问题没有了。但是后来还是有人遇到过这样的问题, 经过验证,确实这个问题还是没有被完全修复。
二次修改: 强设contentOffset
既然是因为contentOffset改变导致的,我就再设置一下contentOffset应该就行了。于是二次尝试:
dispatch_async(dispatch_get_main_queue(), ^{
[UIView animateWithDuration:kAnimationDuration animations:^{
self.scrollView.contentInset = inset;
self.scrollView.contentOffset = CGPointMake(0, -inset.top);
} completion:^(BOOL finished) {
}];
});
试验结果发现,没用,问题还是存在,在这一步耗了不少时间想尽其他办法都没搞定问题,直到我将setContentOffset: 方法改为 setConentOffset:animated: 。 问题就解决了,可以看出系统里面这两个方法的实现是不同的
dispatch_async(dispatch_get_main_queue(), ^{
[UIView animateWithDuration:kAnimationDuration animations:^{
self.scrollView.contentInset = inset;
[self.scrollView setContentOffset:CGPointMake(0, -inset.top) animated:NO];
} completion:^(BOOL finished) {
}];
});
以上所述是小编给大家介绍的iOS下拉刷新 UIScrollVie异常闪动问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# ios
# 下拉刷新
# iOS横屏弹键盘的高度错误异常解决
# iOS中程序异常Crash友好化处理详解
# iOS中捕获日志与异常示例详解
# 解决iOS11图片下拉放大出现信号栏白条的bug问题
# iOS之异常与信号使用场景分析
# 是在
# 可以看出
# 小编
# 是因为
# 我在
# 在这个
# 在这
# 在此
# 都没
# 这个问题
# 我把
# 这两个
# 给大家
# 我将
# 动了
# 看在
# 所述
# 发生了什么
# 给我留言
# 遇到过
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑
Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】
Laravel怎么生成URL_Laravel路由命名与URL生成函数详解
Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】
Laravel怎么使用artisan命令缓存配置和视图
北京网站制作的公司有哪些,北京白云观官方网站?
javascript中的数组方法有哪些_如何利用数组方法简化数据处理
如何在新浪SAE免费搭建个人博客?
Laravel Session怎么存储_Laravel Session驱动配置详解
Laravel如何处理表单验证?(Requests代码示例)
如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)
如何在腾讯云免费申请建站?
七夕网站制作视频,七夕大促活动怎么报名?
Python3.6正式版新特性预览
如何用IIS7快速搭建并优化网站站点?
javascript事件捕获机制【深入分析IE和DOM中的事件模型】
Python制作简易注册登录系统
Laravel如何配置和使用缓存?(Redis代码示例)
如何用AWS免费套餐快速搭建高效网站?
HTML透明颜色代码怎么让下拉菜单透明_下拉菜单透明背景指南【技巧】
Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤
如何用y主机助手快速搭建网站?
Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】
Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】
如何快速搭建高效香港服务器网站?
如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程
在线制作视频的网站有哪些,电脑如何制作视频短片?
C#如何调用原生C++ COM对象详解
EditPlus中的正则表达式实战(6)
PHP正则匹配日期和时间(时间戳转换)的实例代码
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
nginx修改上传文件大小限制的方法
Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧
潮流网站制作头像软件下载,适合母子的网名有哪些?
Linux网络带宽限制_tc配置实践解析【教程】
Laravel如何实现API版本控制_Laravel版本化API设计方案
JavaScript如何实现倒计时_时间函数如何精确控制
高性价比服务器租赁——企业级配置与24小时运维服务
网易LOFTER官网链接 老福特网页版登录地址
Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】
Laravel如何实现模型的全局作用域?(Global Scope示例)
如何在服务器上三步完成建站并提升流量?
公司网站制作价格怎么算,公司办个官网需要多少钱?
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】
Laravel怎么实现验证码(Captcha)功能
Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
Laravel如何使用withoutEvents方法临时禁用模型事件

