UITabelViewCell的数据混叠显示

UItableView Cell复用 重叠问题 UITableView是ios开发中使用率极高的一个控件,最近在弄的一个项目涉及到复杂图文混排 其中cell复用问题凸显出来了! 所谓复用表面意思来理解就是重复利用了。大致的工作原理就是:UITableView属于lazy loading,也就是只加载会在界面上显示的部分。举个例子,比如说UITabeview的调试是400,咱们每个Cell的调试是200,这样的话,手机界面上最多就显示两个C 阅读详情
 以上现象与UITableView是有复用机制与延迟加载的两个特性相关。

     关于延迟加载,因为cell图形显示的开销比存储model的开销要大很多,而且由于屏幕大小的限制,因此无论如何,在屏幕上一次出现的cell的数据量都是有限的,因此若一次性地把所有cell生成,是一种很不现实的做法,因此iOS采用延迟加载的方式,但view需要显示哪个cell的数据,就通过dataSource protocol协议实现数据的现实。

     关于复用机制,同样由于屏幕一次能显示的cell的数量有限,而且创建与释放cell都是需要一定的开销,所以采用若发生滚动事件时,就释放不存在屏幕中的cell,创建新的cell的方式是低效极其不合理的。
     所以iOS的tableView采用以下的cell复用机制(CollectionView也如此):
     
      
//上图流程的实现代码
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    static NSString *identification = @"hehe";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identification];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identification];
    }
    cell.textLabel.text = @"喵";
    return cell;
}
结合上图与代码可得,每当cell不够用的时候,就回通过[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identification];方法生成cell,若cell足够用,而屏幕有移动行为时,移出屏幕的cell就会被快速回收并填充上新的数据,然后被用于显示。所以[tableView dequeueReusableCellWithIdentifier:identification]方法就是通过reuseIdentifier重用id来搜索还存在未被使用的cell的方法。

     结合对cell重用机制的原理的理解,在使用非自定义cell的过程中,重用的数据重装过程只是数据的替换,而本项目中的数据重装过程是不断地通过添加带数据的子视图,因此就出现了子视图的混叠情况。所以解决方案就是在取得重用的cell时移除所有子视图,实现代码如下:
    LogCell *cell = [tableViewdequeueReusableCellWithIdentifier:ID];
   
if (cell == nil) {
        cell = [[
LogCellalloc]initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:ID];
    }
else{
       
while (cell.contentView.subviews.lastObject!= nil) {
            [cell.
contentView.subviews.lastObjectremoveFromSuperview];
        }
    }

     从上述代码可得,通过对cell的子视图从后到前遍历,直到所有子视图全部从父视图中移除。至于,为什么这里是从cell.contentView中移除,因为这样这样是现实的话,仅仅需要替换数据的子视图放到直接放到cell中,而需要重新生成子视图的就放置到cell.contentView中,这样就可以避免无谓的子视图生成的消耗。

CentOS7无外网环境下MySQL8.0完整离线部署指南 本文详细介绍了在CentOS7无外网环境下,如何通过MySQL8.0二进制包进行完整离线部署。指南涵盖了从环境准备、依赖安装、用户与目录创建,到数据库初始化、服务配置及远程访问设置的全过程,并提供了关键的避坑技巧,帮助企业运维人员在内网环境中高效、稳定地搭建MySQL数据库服务。 阅读详情

相关推荐

Matlab2018a崩溃解决的办法No sandbox or build area path

Matlab 2018a (No sandbox or build area path)出现崩溃后需要使用terminal进行如下操作: cd /home/david/MySoft/MATLAB/R2018a/bin/glnxa64 (你的matlab路径) mkdir exclude mv libfreetype* exclude/ 执行后图片如下: 如果你用的Windows系统,请手动按照上面步骤剔除了dll。 Matlab 2018a (No sandbox or build are

David Xiao 1万+

信号采样混叠/混频

信号采样混叠0、使用AD5933分析复阻抗的时钟频率设置_卓晴的博客-优快云博客频率混叠是怎样产生的,有什么解决办法? 答:(1)当采用过大的采样间隔Ts对两个不同频率的正弦波采样时,将会得到一组相同的采样值,造成无法辩识两者的差别,将其中的高频信号误认为低频信号,于是就出现了所谓的混叠现象。(2)为了避免频率混叠,应使被采样的模拟信号x(t)成为有限带宽的信号,同时应使采样频率fs大于带限信号的最高频率fh的2倍。1、混叠(频率名词)_百度百科混叠(英语:Aliasing),频率名词,在信号频谱上可称作

学海无涯的专栏 1万+

人工智能——框架表示法

1975年美国明斯基在“A framework for representing knowledge”提出了框架理论。 1. 框架及框架的一般表示形式 框架:一种描述对象属性的数据结构。 框架的一般表示形式 <框架名> 槽名1: 侧面名1:值1,值2…,值p1 侧面名2:值1,值2…,值p2 侧面名2:值1,值2…,值pm1 槽名2: 侧面名...

weixin_33759269的博客 1642

IOS开发中UITableView和UITableViewCell的几种样式

说了很久要写自己的技术博客,由于执行力差,一直拖到现在才开始写文章。我是一个刚进入软件行业还不到一年的小菜鸟,没有什么技术可言,然后就在这里斗胆妄自尊大的在博客园上写些东西,还希望技术大牛们不要嘲笑。我写此博客的目的是想通过这些跟大家交流技术,跟一些也像我一样刚进入软件行业的朋友一点参考。文章里有什么错误欢迎大家能够给我批评指出,以后我会更加努力,学好技术跟大家分享。虽然内容技...

weixin_30732825的博客 429

支付逻辑漏洞的八大姿势(上篇)

学习支付漏洞,看这篇文章!!!文章来源:SecHub网络安全社区(本资料仅供学习参考,严禁使用者进行未授权渗透测试!严禁任何形式的转载!

qq_39493066的博客 1358

ESD防护设计宝典(十):RE(辐射发射)超标问题排查与解决

RE测试是EMC认证的“头号杀手”。当屏幕上出现一根根超标频谱线时,如何快速定位元凶并有效整改?本讲将带你化身电磁侦探,完成一次完美的RE问题“缉凶”。

m0_56451176的博客 394

代码实现 UITableView与UITableViewCell

我们常用的表格类视图就是用 UITableView与UITableViewCell,UITableViewController继承UIViewContoller,所以只要很少代码就可以显示一个视图,UITableViewController也是UIScrollView子类,所以也有上下滑动效果 ;UITableView和UITableViewCell不能储存数据,可以用来显示特定行数内的数据,而且

新风作浪的博客专栏 4万+

SPSS 多重共线性问题:编程解决方案

多重共线性会导致回归模型的不稳定性,使得估计的回归系数失去解释力,降低模型的准确性和可靠性。通过执行这些代码,你将能够计算和查看VIF和CI的结果,并确定是否存在多重共线性问题。上述代码执行了一个回归分析,其中A是我们感兴趣的因变量,B、C、D和E是我们要检查的自变量。接下来,我们将执行多重共线性的检测。通过执行上述代码,你将能够看到每个自变量的VIF和CI值,以及预先设置的阈值。上述代码将计算VIF和CI的值,并将结果写入指定路径的结果文件中。接下来,我们可以使用以下代码来计算和显示VIF和CI的值。

CyberGenius的博客 1426

UITableViewCell详解

UITableViewCell详解 UITableViewCell类定义了在UITableView对象中出现的cell的属性和方法。一个的UITableViewCell对象包含了控制一个cell在选中、高亮、编辑、控制等状态下的属性和方法。该类还包括用于设置和管理单元格内容的属性,特别是文本和图像。 对于iOS 3.0,UITableViewCell包括两个主要改进: 预定义单元格样式,可以在某些

liushaozhuanyong的博客 4659

华为OD技术面真题 - Python开发 - 2

汇总华为OD技术面八股Python八股,高频技术真题并提供详细解答。

qq_45776114的博客 910

00 — Intel xe SVM 内核实现精读系列专栏导读

本文系统介绍了Intel Xe GPU的共享虚拟内存(SVM)实现机制。第一部分通过概念地图阐述SVM的六个核心概念及其关系;第二部分通过三个测试用例解析SVM关键功能:fault生命周期验证、madvise与VRAM迁移、跨GPU一致性;第三部分深入内核实现,包括初始化/销毁流程、Page Fault处理、MMU Notifier失效路径、异步垃圾回收、VRAM迁移机制、madvise实现原理,以及与ROCm SVM的对比。文章建议按功能模块顺序学习,从基本概念到测试用例,再深入内核实现细节,最后对比不同

图形/计算GPU的驱动与虚拟化技术分享园地 1662

ios之UITabelViewCell的自定义(xib实现2)

上篇文章介绍了如何用UITableView显示表格,并讲了几种UITableViewCell的风格。不过有时候我们需要自己定义 UITableViewCell的风格,其实就是向行中添加子视图。添加子视图的方法主要有两种:使用代码以及从.xib文件加载。当然后一种方法比较直 观。 我们这次要自定义一个Cell,使得它像QQ好友列表的一行一样:左边是一张图片,图片的右边是三行标签: 当然,我们...

weixin_33852020的博客 85

华为OD机试 - 第k个排列 - 全排列递归(Python/JS/C/C++ 2025 C卷 100分)

给定参数n,从1到n会有n个整数:1,2,3,…,n,这n个数字共有n!按大小顺序升序列出所有排列的情况,并一一标记当n=3时,所有排列如下“123”,“132,“213”,“231”,“312”,“321”输入两行,第一行为n,第二行为k,给定n的范围是[1,9],给定k的范围是[1,n!排列为“12”和“21”,第2个是“21”。给定n和k,返回第k个排列。输出排在第k位置的数字。只有一个排列,直接返回。

学Java,找哪吒 983

UITabelViewCell高度的自适应

转自Haven's Blog   不知道大家有没有发现,在iOS APP开发过程中,UITableView是我们显示内容常见的控件,本人觉得它是UIKit中最复杂的一个控件。今天要向大家介绍的就是如何动态计算UITableViewCell高度的一经验与技巧,在此做一些总结方便朋友们查阅。为了不让讲解空洞抽象,我还是用代码实例的方式进行讲解,这样更容易接收与学习。   本文将介绍四种情况

Jamison Fan的博客 673

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

UITabelViewcell 关于分割线设置以及点击cell时候的有选中状况不点立刻变成没有选中状态(全线显示,没有数据的cell进行隐藏)...

// 设置Tab分隔线-(void)setLayoutMargins:(UITableView*)table{ if ([table respondsToSelector:@selector(setSeparatorInset:)]) { [table setSeparatorInset:UIEdgeInsetsMake(0,0,0,0)]; } i...

weixin_34383618的博客 181

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

ios之UITabelViewCell的自定义(xib实现)

通过继承UITableViewCell来自定义cell 1、创建一个空的项目、命名: 2、创建一个UITableViewController 并且同时创建xib: 3、设置AppDelegate.m中window的根控制器为刚刚创建的TableViewController: [cpp]view plaincopyprint? -...

weixin_33713707的博客 143

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

IOS 通过 代码 自定义cell(Cell的高度不一致)(优化性能)

创建cell的步骤 1.新建一个继承自UITabelViewCell的类 2.重写 initWithStyle:ReuseIdentifier: 方法 添加所有需要显示的子控件(不需要设置子控件的数据和frame,子控件要添加到contentView中) 进行子控件一次性的属性设置(有些属性中需要设置一次,比如字体\固定的图片) 3.提供2个模型 数据模型:存放文字...

weixin_30909575的博客 212

04环信聊天界面 - 接收方cell的布局

1.拖一个UITabelViewCell到聊天界面的tableView里。cell里需要添加3个控件,1个UIImageView作为头像,一个UILabel(显示聊天文字),另一个imageView(作为label的背景)。 控件关系:背景的imageView其实就是聊天气泡,文字在气泡内,文字和气泡有边距。 头像尺寸35x35, UILabel设置Lines属性为0就可以换行,并且要

2587

iOS中如何优化Cell中图片的下载性能

在iOS开发中使用最为常见的是UITableView,其中UITabelViewCell中下载图片,会影响用户下拉刷新UI,导致卡顿,用户体验不好,在这篇blog中,我将以一个例子来说明如何优化UITableView下载图片

jiandanjinxin的专栏 1258

黑马程序员-IOS学习笔记-UITableViewCell

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 一、UITableViewCell 1.  UITableView的每一行都是一个UITableViewCell,通过dataSource的tableView:cellForRowAtIndexPath:方法来初始化每一行。 2.  UITableViewCell时候UIVie

sdfgsdfgtytty4536的专栏 513

智能汽车芯片技术解析:从MCU到SoC的演进与应用

汽车芯片作为智能汽车的核心组件,正经历从传统机械控制向算力驱动的革命性转变。MCU(微控制器)作为控制基石,负责车辆基础功能,具备双核锁步架构和ECC校验等安全特性。SoC(系统级芯片)则承担自动驾驶等复杂任务,其算力和能效比成为关键指标。功率半导体如SiC模块在电能转换中展现高效优势。这些芯片共同构成智能汽车的神经中枢、大脑和心血管系统。随着汽车电子化程度提升,芯片用量从燃油车的500颗激增至电动车的1500颗,推动汽车向“轮上计算机”转型。本文通过特斯拉Model 3等实例,解析汽车芯片的技术原理、应用

weixin_34284188的博客 387

UITabelView移动,编辑大总结

zhangRu___的博客 427

tableview 在重用时如何避免内容重复

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {     static NSString *CellIdentifier = @"Cell";     UITableViewCell *cell = [tableView dequeu

bzty_lzy的博客 484

iOS9下UICollectionViewCell的awakeFromNib问题

  最近项目测试出一个隐藏已久的bug,经过多番测试,发现在iOS9下自定义的一个UICollectionViewCell只走一次awakeFromNib。   具体情况是,项目中有一个控制器用到了自定义的UICollectionView,有四组数据,然而有三组自定义的UICollectionViewCell布局和子控件是一样的,所以只注册了两种类型的cell #import <UI...

weixin_30767921的博客 435

iOS 竖向tableView上添加横向tableView

要点一:使用CGAffineTransform来270度旋转UITableView 要点二: 创建一个UITableViewCell的子类,在该类中将横向tableView添加到cell中 具体实现见代码:      效果如下图:   Cell.h文件 #import @interface Cell : UITableViewCell { CGAffineTransfor

bluesky903的专栏 3306
上一篇: block回调中调用方法的UI更新问题
下一篇: 《Objective-C学习总结》
luozhiwei_iOS
博客等级 码龄12年 4粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值