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方法临时禁用模型事件