首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在UITableView上滚动时UIActivityIndicatorView会消失

基础概念

UITableView 是 iOS 开发中常用的一个控件,用于展示列表数据。UIActivityIndicatorView 是一个用于显示加载状态的控件,通常在数据加载时显示,加载完成后隐藏。

相关优势

  • 用户体验UIActivityIndicatorView 可以提供良好的加载反馈,让用户知道应用正在处理请求。
  • 界面友好:通过显示加载指示器,可以避免用户在数据加载过程中误操作。

类型

UIActivityIndicatorView 有几种样式可供选择:

  • UIActivityIndicatorView.Style.large
  • UIActivityIndicatorView.Style.medium
  • UIActivityIndicatorView.Style.small

应用场景

  • 数据加载:当从网络或本地数据库加载数据时。
  • 文件上传/下载:在文件传输过程中显示加载状态。
  • 复杂计算:在执行耗时的计算任务时。

问题分析

UITableView 上滚动时 UIActivityIndicatorView 消失的问题通常是由于 UITableView 的复用机制导致的。当 UITableView 滚动时,它会复用不再显示的 cell,这可能会导致 UIActivityIndicatorView 被错误地隐藏或移除。

原因

  1. Cell 复用UITableView 会复用 cell,如果复用的 cell 包含 UIActivityIndicatorView,可能会导致其状态不一致。
  2. 布局问题UIActivityIndicatorView 的布局可能没有正确设置,导致在滚动时被错误地隐藏。

解决方法

1. 使用自定义 Cell

创建一个自定义的 cell 类,并在其中管理 UIActivityIndicatorView 的显示和隐藏。

代码语言:txt
复制
class CustomTableViewCell: UITableViewCell {
    let activityIndicator = UIActivityIndicatorView(style: .medium)

    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
        setupActivityIndicator()
    }

    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    private func setupActivityIndicator() {
        contentView.addSubview(activityIndicator)
        activityIndicator.translatesAutoresizingMaskIntoConstraints = false
        NSLayoutConstraint.activate([
            activityIndicator.centerXAnchor.constraint(equalTo: contentView.centerXAnchor),
            activityIndicator.centerYAnchor.constraint(equalTo: contentView.centerYAnchor)
        ])
    }

    func startAnimating() {
        activityIndicator.startAnimating()
    }

    func stopAnimating() {
        activityIndicator.stopAnimating()
    }
}

UITableViewDataSource 中使用自定义 cell:

代码语言:txt
复制
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "CustomCell", for: indexPath) as! CustomTableViewCell
    if shouldShowActivityIndicator(for: indexPath) {
        cell.startAnimating()
    } else {
        cell.stopAnimating()
    }
    return cell
}

2. 使用 UITableViewcontentOffset 监听

通过监听 UITableViewcontentOffset 变化,手动控制 UIActivityIndicatorView 的显示和隐藏。

代码语言:txt
复制
override func scrollViewDidScroll(_ scrollView: UIScrollView) {
    let offsetY = scrollView.contentOffset.y
    if offsetY > 0 {
        activityIndicator.isHidden = true
    } else {
        activityIndicator.isHidden = false
    }
}

参考链接

通过以上方法,可以有效解决在 UITableView 上滚动时 UIActivityIndicatorView 消失的问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

优雅的处理网络数据,你真的会吗?不如看看这篇.

但是,当需要显示大量数据时,确保平滑如丝的滚动可能会非常的棘手。所以今天正好趁这个机会,和大家分享一下处理大量可滚动数据方面的个人经验。...,然后在控件底部显示一个 Loading 动画,待请求数据返回后,Loading 动画消失,由 UITableView 或者 UICollectionView 控件继续加载这些数据并显示给用户,效果如下图所示...为了改善应用程序体验,在 iOS 10 上,Apple 对 UICollectionView 和 UITableView 引入了 Prefetching API,它提供了一种在需要显示数据之前预先准备数据的机制...首先,我先和大家介绍一个概念:无限滚动,无限滚动是可以让用户连续的加载内容,而无需分页。在 UI 初始化的时候 App 会加载一些初始数据,然后当用户滚动快要到达显示内容的底部时加载更多的数据。...如何避免滚动时的卡顿 当你遇到滚动卡顿的应用程序时,通常是由于任务长时间运行阻碍了 UI 在主线程上的更新,想让主线程有空来响应这类更新事件,第一步就是要将消耗时间的任务交给子线程去执行,避免在获取数据时阻塞主线程

1.4K20
  • 【iOS开发】解决 UITableview 中选中 Cell 后,Cell 复用导致选中状态消失、应用闪退的问题

    如图,是一个可以多项选择的 UITableview,但是因为 iOS 的 Cell 复用机制,即下面的 reuseIdentifier 部分 let cell:UITableViewCell=UITableViewCell...Checkmark状态,但是当页面滚动至不可见某个Cell,再滚动回来时,Cell 的 Checkmark状态消失了。...当页面滑动时,我们标记为Checkmark的Cell会被复用,从而丢失这个状态。...cellForRowAtIndexPath 方法中,查看哪些cell是应该被选中过的,然后改成Checkmark状态;         结果就可能会产生数组越界、App崩溃,以及错误的indexPath...在 cellForRow 方法中,不需要for循环可以三行代码给cell加Checkmark标记。 ?

    2K20

    iOS开发中行高灵活可变的UITableView的性能优化

    以iOS9为例,一行cell要展示在屏幕上,至少要执行5遍TableView的heightForRowAtIndexPath方法: TableView配置部分: ① 当TableView视图即将展现在屏幕上时...TableViewCell配置部分,只有当cell将要出现在屏幕上时才会出现,并且只拉取当前行的行高,这两种场景会在用户滑动TableView时不断被执行,并且根据UITableView的布局cell原理...当执行TableView的reloadData方法进行界面刷新时,系统先会把所有行的行高数据拉取一遍,之后和UITableViewCell配置部分的场景一直,会拉取即将出现在屏幕上的cell的行高数据。...至于为何UITableView在进行配置时也需要拉取所有的行高数据,我猜想其为了进行视图的一些初始化操作,例如表视图右侧滚动条的宽度和所占比例等。...关于细节方面,还有一个问题需要注意,预估的行高会影响到TableView右侧滚动条的展现,如果每个cell行高跳跃跨度十分大,滚动条宽度的配置会失准,随着用户滑动表视图,右侧滚动条可能会出现长短跳跃的情况

    2K20

    一个多UITableview的左右滑动简单解决方案

    前言 本文源自实际开发中的需求,核心的要求有几个: 1、多个UITableview要支持左右滑动; 2、点击Tab也要有UITableview的滑动切换效果; 3、每个UITableview单独的下拉刷新和上拉加载...self.mContainerScrollView.contentSize = CGSizeMake(self.view.width * 4, 0); // 写0,关闭vertical的滚动 如果需要滚动到某一页...当UIScrollView直接添加到self.view的属性上时,如果automaticallyAdjustsScrollViewInsets为YES,会调整UIScrollView的inset以适应status...总结 多UITableview的VC本身已经有上万行代码,散布在十几个Category里面。相对于老代码的迁移,这次新增一个左右滑动功能的代码简直是微不足道。...在代码复杂度已经很高的架构里实现功能,犹如在钢绳交错的天空中行走,一不小心就踏空踩到Bug;又可能明明走在自己的这条钢绳上,结果把别人甩到坑里去。 三思而后行,代码以兼容稳健为主。

    2.8K71

    iOS开发常用之网络

    TabBarController,支持自定义TabBarItem样式或添加动画 隐藏与显示 SlideTapBar - 滚动栏菜单,向上滚动时隐藏tabbar,向下滚动马上显示tabbar。...DCPathButton - Path,4.0的弹出菜单,呼出或者关闭菜单时,多个小图标会分别按照逆时针和顺时针的方向进行滚动。...MediumScrollFullScreen - Medium的可扩展滚动页面,上下滚动时,全屏显示内容,并自然消隐上下菜单。...拖拉到一定的长度会消失,可以通过系数设置来控制拖拉的长度。气泡也支持多种属性设置。 PPDragDropBadgeView - 实现了类似于QQ 5.0的水滴拖拽效果。...KYAnimatedPageControl - 除了滚动视图时PageControl会以动画的形式一起移动,点击目标页还可快速定位。支持两种样式:粘性小球和旋转方块。

    23.7K10

    UITableView性能优化-中级篇

    老实说,UITableView性能优化 这个话题,最经常遇到的还是在面试中,常见的回答例如: Cell复用机制 Cell高度预先计算 缓存Cell高度 圆角切割 等等. . ....*)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 被调用了20次,不符合 需求1的要求 解决办法: cell每次被渲染时,判断当前...tableView是否处于滚动状态,是的话,不加载图片; cell 滚动结束的时候,获取当前界面内可见的所有cell 在2的基础之上,让所有的cell请求图片数据,并显示出来 步骤1: - (UITableViewCell...下的任务会暂停 停止滚动的时候 - 进入`defaultMode` - 继续执行`trackingMode`下的任务 - 例如这里的loadImage */...,可以先下载图片,再对图片进行圆角处理,再设置到cell上显示 问:YYWebImage 如何设置圆角?

    1.6K20

    iOS UITableView左滑操作功能的实现(iOS8-11)

    4、上面1.2和1.3中实现的方法的区别 体验上的不同就是当左滑只有一个button时,iOS 11中可以一直左滑,滑到一定程度时,会执行点击按钮的操作,iOS 11之前的不会。...iOS 11之前如果想增大button区域,可通过在标题前后加空格的方式,但iOS 11不行,加空格无效,button大小固定,超过4个字时换行显示。...实现的思想是hook系统实现,但鉴于UITableView的view层级结构在iOS 11中有所改变,所以iOS8-10和iOS11的实现有所不同,以下分别给出。...由上图可知,左滑的操作按钮是在UITableView的子view,所以我们可以在UITableView的category中hook掉layoutSubviews方法,找到UISwipeActionPullView...上一个cell会逐渐消失,当此cell左滑操作完成时,上一个左滑的cell也会完成消失。

    1.2K81

    【IOS开发基础系列】UICollectionView专题

    1.3 关于重用         为了得到高效的View,对于cell的重用是必须的,避免了不断生成和销毁对象的操作,这与在UITableView中的情况是一致的。...但值得注意的时,在UICollectionView中,不仅cell可以重用,Supplementary View和Decoration View也是可以并且应当被重用的。...selectedBackgroundView,是cell被选中时的背景     • 最后是一个contentView,自定义内容应被加在这个view上         这次Apple给我们带来的好康是被选中...cell的自动变化,所有的cell中的子view,也包括contentView中的子view,在当cell被选中时,会自动去查找view是否有被选中状态下的改变。...需要注意根据滚动方向不同,header和footer的高和宽中只有一个会起作用。垂直滚动时section间宽度为该尺寸的高,而水平滚动时为宽度起作用,如图。

    90430

    iOS UITableView左滑操作功能的实现(iOS8-11)

    4、上面1.2和1.3中实现的方法的区别 体验上的不同就是当左滑只有一个button时,iOS 11中可以一直左滑,滑到一定程度时,会执行点击按钮的操作,iOS 11之前的不会。...iOS 11之前如果想增大button区域,可通过在标题前后加空格的方式,但iOS 11不行,加空格无效,button大小固定,超过4个字时换行显示。...实现的思想是hook系统实现,但鉴于UITableView的view层级结构在iOS 11中有所改变,所以iOS8-10和iOS11的实现有所不同,以下分别给出。...由上图可知,左滑的操作按钮是在UITableView的子view,所以我们可以在UITableView的category中hook掉layoutSubviews方法,找到UISwipeActionPullView...上一个cell会逐渐消失,当此cell左滑操作完成时,上一个左滑的cell也会完成消失。

    63740

    iOS开发笔记(十一)— UITableView、ARC、xcconfig、Push

    前言 分享iOS开发中遇到的问题,和相关的一些思考,本次内容包括:UITableView滚动问题、ARC、xcconfig、Push证书。...正文 UITableView UITableView在reloadData 的时候,如果height的高度发生较大变化,contentOffset无法保持原来的大小时,会发生滚动的效果。...UITableView还有类似的问题,如果列表项过多时,scrollToRowAtIndexPath有时并不准确,比如有1000行时滚动到第500行,此时可能会出现滚到501或者499行的情况。...最近同事遇到一个问题,以下代码会crash: 他实现了一个editingButton的getter,同时在dealloc的时候将其移除; 如果editingButton在整个生命周期都没有初始化时,...总结 这些都是在项目中遇到的一些问题,UITableView这个是老生常谈,ARC那篇文档是很好的学习资料,xcconfig需要多研究,未来随着版本和渠道增多会越来越复杂,Push在Easy APNs

    1.8K20

    iOS UITableView左滑操作功能的实现(iOS8-11)

    4、上面1.2和1.3中实现的方法的区别 体验上的不同就是当左滑只有一个button时,iOS 11中可以一直左滑,滑到一定程度时,会执行点击按钮的操作,iOS 11之前的不会。...实现的思想是hook系统实现,但鉴于UITableView的view层级结构在iOS 11中有所改变,所以iOS8-10和iOS11的实现有所不同,以下分别给出。...1、iOS 8-10 设置标题颜色和字体 左滑操作后,UITableView的层级结构如下图: [4.png] 由上图可知,左滑的操作按钮是在UITableViewCell的子view,所以我们可以在UITableViewCell...代码如下: [5.png] 2、 iOS 11 设置标题颜色和字体 左滑操作后,UITableView的层级结构如下图: [6.png] 由上图可知,左滑的操作按钮是在UITableView的子view...上一个cell会逐渐消失,当此cell左滑操作完成时,上一个左滑的cell也会完成消失。

    1.7K80

    iOS流水布局UICollectionView简单使用引实现结

    引 开发中我们最常看到的可能是表视图UITableView了,但其实还有一个视图也很常见,特别是一些图片、商品、视频的展示界面,用UICollectionView来展现往往会更加方便。...如果熟悉UITableView的话,其实很多地方都是类似的,甚至可以说UITableView是一种特殊的UICollectionView,正如正方形是一种特殊的矩形一样,UITableView就是一种每行只放一个方块的...自定义Cell 根据UITableView的经验。首先看每个方块,也就是每个cell怎么呈现,这里的cell明显是自定义的,我们用一张图片填满cell,同时在底部居中的位置放置一个label。...为了显得真实一点,我用了一个随机数来决定每个cell显示的图片和文字,这样在呈现的时候就不会太过千篇一律。...代码中注释了一行,就是用来设置滚动方向为水平的,效果如下: 同样的内容,滚动方式变化后,呈现的效果也会变化。

    1.1K00
    领券