cell高度的缓存2——利用模型属性缓存

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/53204196

之前的一篇文章(http://blog.csdn.net/u010105969/article/details/53203860)介绍了利用字典缓存cell高度的方法,可还是略显复杂,因为要多定义一个字典,还得注意字典数据的清除。我们如果利用已有的模型进行cell高度的缓存会更简单些。

我们要利用的模型是与cell一一对应的模型。在该模型中增添一个cellHeight的属性用于记录cell的高度。看代码:

// 重写cell的get方法

- (CGFloat)cellHeight{

if (_cellHeight == 0.f) {   // 如果单元格高度为零

CGFloat cellHeight = 0;

        cellHeight += 30;

NSString * text = self.text;

NSMutableDictionary * dic = [NSMutableDictionary dictionary];

        dic[NSFontAttributeName] = [UIFont systemFontOfSize:17];

CGRect textRect = [text boundingRectWithSize:CGSizeMake(WIDTH-20, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:dic context:nil];

        cellHeight += textRect.size.height;

        cellHeight += 30;

_cellHeight = cellHeight;

NSLog(@"cell 高度%f", _cellHeight);

    }

return _cellHeight;

}

以上的代码写在模型的.m文件中。此时heightForRowAtIndexPath方法中的代码为:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{

TopicModel * model = self.dataSource[indexPath.row];

return model.cellHeight;

}

看是不是Controller中的代码精简了许多。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏每日一篇技术文章

SceneKit_入门13_骨骼动画

1.创建工程(略) 2.加载场景文件(略) 3.添加框架SceneKit/Scenekit.h 4.创建场景资源对象

29630
来自专栏一“技”之长

iOS开发CoreGraphics核心图形框架之一——CGPath的应用

    CoreGraphics核心图形框架相较于UIKit框架更加偏于底层。在Objective-C工程中,CoreGraphics其中方法都是采用C语言风格...

14120
来自专栏葡萄城控件技术团队

WPF/Silverlight Layout 系统概述——Arrange

上一篇我们介绍了WPF/Silverlight Layout系统的Measure过程,本文将继续介绍Arrange过程。 Arrange过程概述 普通基类属性对...

21190
来自专栏章鱼的慢慢技术路

使用Photoshop画一个圆锥体

24050
来自专栏wym

Windows 下窗口画图---十天教会你俄罗斯方块

接上篇:https://blog.csdn.net/qq_41603898/article/details/80968333

12910
来自专栏君赏技术博客

想要漂亮的蒙版指引吗?跟着我手把手的教你写出来

既然接到了这个需求,那么就需要做出来,第一眼看上去确实有点难。当时安卓已经找到了对应的库,十分容易的做这个需求了。

13120
来自专栏Objective-C

Swift-MVVM 简单演练(四)

40950
来自专栏章鱼的慢慢技术路

通过C#脚本实现旋转的立方体

17830
来自专栏算法+

分享用于学习C++图像处理的代码示例

为了便于学习图像处理并研究图像算法, 俺写了一个适合初学者学习的小小框架。 麻雀虽小五脏俱全。 采用Decoder:stb_image https://gith...

811110
来自专栏林德熙的博客

WPF 使用 SharpDX

先介绍一下 SharpDx ,一个底层封装的 DirectX 库,支持 AnyCpu ,支持 Direct3D9, Direct3D11, Direct3D12...

24310

扫码关注云+社区

领取腾讯云代金券