IOS研究成果——在autolayout 如何实现 Cell 的高度自适应

cell高度自适应实现的最简单方式 曾经为了实现cell的高度自适应,不知道吃了多少苦。那个时候,是在我的数据模型model中添加一个height属性,实现它的get方法,在get方法中计算需要多行显示文字的高度,然后再加上其他乱七八糟的高度并返回,然后在tableview的 - (CGFloat)tableView:(UITableView )tableView heightForRowAtIndexPath:(NSIndexP 阅读详情

Hello,小编又来了,距离上次写博客都有一段日子了,主要是这个月一直在赶新项目,项目推了又改改了又推,需求被改无数,泪奔。。。但是在做项目的时候发现了好多小细节,等项目做完了就拿来给大家看看,好了,不再多废话了,回归我们今天的主题。

其势 Autolayout 技术再 IOS6的时候就已经开始有了,但是大多数人还是习惯不了这个看起来奇特的东西,而且官方文档做到根本不是人看的,但是现在越来越多的人开始使用 autolayout 了,为什么?因为好用呀,就是这么简单,以前辛辛苦苦算 frame 值,现在大家就只需要抛开他,拥抱我们的 autolayout 就可以了,当然也有一些特殊情况,这里先不说,那么,我们在用 autolayout 的时候会碰到一个问题,怎么让我们的 cell 自适应呢?大家都知道,以前我们让 cell 自适应的时候,都是通过在模型赋值的时候计算出内容的 frame 值,也就是我们经常说的 frameModel,但是这个方法很沉郁,辛辛苦苦拿内容过去慢慢计算,稍微算法不好的同学就在这里跪了,那么 autolayout 完全就帮到你了,因为 label 的高度都是自适应的,非常好用,在说这个技术之前希望之前不太懂 autolayout 的同学恶补一下。。。。毕竟时代在进步,技术不断更新,在这里推荐大家使用一个第三方进行更好的运用 autolayout,到 GitHub 搜索Masonry这个绝对的代码 autolayout 布局的神器。当 你布局发生问题时还会有很好的提醒让你发现的那里出问题了。点击这里

先说一下思想:
1.启用估计行高(IOS8)下的实现,当你开启此方法再要 autolayout 布局的时候,自适应已经开启了,但是这只是使用与 IOS8以上的系统,当运行到 IOS7的时候,就会崩溃了


    self.tableView.rowHeight = UITableViewAutomaticDimension;
    self.tableView.estimatedRowHeight = 44.0; // 设置为一个接近“平均”行高的值,用来估算修正tableView滚动条的高度

这样做是为了让tableView 上显示的 cell 临时的估计一个行高,主要使用来修改 tableView 右侧滚动条的大小,告诉它我下面还有多少内容,你自己看着办。但是一旦当 cell 出现在屏幕的时候这个值就会重新被计算,所以有时候我们设置的估算只比较少的时候,会出现一个滚动条跳跃的情况,这个会出现在估算一个 cell 的高度跟实际 cell 的高度相差比较大的时候出现,这个时候,你才应当实现tableView:estimatedHeightForRowAtIndexPath:方法,为每一行返回一个更精确的估算值。

IOS7下支持的方法(需要自己实现 cell 尺寸的自适应功能)

2.1创建一个用作缓存的实例,cacheCells
当然你要为在这个 tableView 显示的每一种 cell 都必须给一个重用的标识符,因为每一种cell 的布局不同,被估算出来的高度也会不相同的,这些 cell 完全是用作高度计算的,绝对不会被用作tableView:cellForRowAtIndexPath:方法的返回值以实际呈现在屏幕上。)接着,这个cell的内容(例如,文本、图片等等)还必须和会被显示在table view中的内容完全一致。

2.2使用估算行高
当你一加载程序进来的时候,你的 tableView 中已经有几十行 Cell,你会发现自动布局约束的解决方式在第一次加载table view的时候会迅速地卡住主线程。这是因为tableView在第一次加载中会调用 tableView:heightForRowAtIndexPath:方法(主要就是为了计算滚动条的大小)
所以在 IOS7中,你绝对可以使用estimatedRowHeight,让滚动条拥有一个估算的值,让不在屏幕中的 cell 告诉滚动条,我应该有多高,滚动条就会根据估算值而显示大小,然而,这些 cell 都会在显示在屏幕的时候计算出真实高度,那么滚动条也跟着改变。
上面也说过,如果使用估算值的话,当 cell 的高度与被估算的高度严重不匹配的时候,滚动条会有跳跃现象,这个时候,你才应当实现tableView:estimatedHeightForRowAtIndexPath:方法,为每一行返回一个更精确的估算值。

  1. 缓存行高(如果需要)
    如果上面提到的你都做了,但是tableView:heightForRowAtIndexPath
iOS AutoLayout全解 AutoLayout简介Autolayout是一种全新的布局技术,专门用来布局UI界面的,用来取代Frame布局在遇见屏幕尺寸多重多样的问题。Autolayout自iOS 6开始引入,但是由于Xcode 4的不给力,当时并没有得到大规模推广。在iOS 7(Xcode5)开始,Autolayout的开发效率得到很大的提升,苹果官方也推荐开发者尽量使用Autolayout来布局UI界面,减少纯代码的方式 阅读详情

相关推荐

iOS利用AutoLayout自适应Cell高度,优化UITableViewCell高度计算

最近在研究UITableViewCell高度的自适应,在网上找到了一个国内人员开发的工具类,自己下载下来研究了一下,感觉非常不错,用起来也非常方便,这是高手的博客地址http://blog.sunnyxx.com/2015/05/17/cell-height-calculation/ 这是工具类的git地址https://github.com/forkingdog/UITableView-FDTemplateLayoutCell 我自己也用着写了个demo,望大家参考一下。用这个之前要会使用AutoLayout

从零到一:用Python打造你的智能交互桌宠,附完整源码与打包指南

本文详细介绍了如何从零开始使用Python开发智能交互桌宠,涵盖环境配置、窗口创建、动图加载、交互功能实现及打包发布全流程。教程特别适合零基础开发者,通过完整源码和分步指南,帮助读者快速掌握桌面宠物开发技巧,打造个性化AI伴侣。

weixin_29094539的博客 292

weblogic 集群搭建,双机部署,相关问题记录

4.5.集群搭建1 参考网址https://wenku.baidu.com/view/76365129cd1755270722192e453610661ed95aa4.html IP地址 端口 角色 192.168.1.160 9001 AdminServer ...

zl386119974的专栏 1669

CentOS 7下glibc升级到2.28的保姆级避坑指南(含GCC 7.3.1编译配置)

本文详细介绍了在CentOS 7系统中将glibc升级到2.28版本的完整流程,包括GCC 7.3.1的编译配置、环境变量设置、glibc编译的细节处理以及生产环境验证。文章特别强调了风险控制和避坑技巧,适用于需要提升系统兼容性的企业级用户。

weixin_29611239的博客 408

从零手搓大模型(一)文本如何变成 LLM 的输入

本文介绍了从原始文本到LLM输入向量的完整处理流程。主要内容包括: 文本预处理:通过正则表达式将原始文本分割成token列表,处理标点和空格。 词表构建:创建token到ID的映射字典(vocabulary),这是文本数字化的关键步骤。 简单tokenizer实现:封装了编码(encode)和解码(decode)功能,完成文本与token ID的相互转换。 处理流程:原始文本 → 分词 → token ID → 嵌入表示 → 最终输入向量。 数据形状变化:从字符串逐步转换为(batch_size, cont

echo的博客 998

数据挖掘实战-基于情感分析+网络语义分析+LDA主题分析对大唐不夜城用户评论进行文本分析

本研究基于去哪儿网和携程网的1888条大唐不夜城游客评论数据,运用Python进行文本分析。通过情感分析发现游客评价以积极为主(占比约70%),中性占20%,消极占10%。采用ROSTCM6软件进行社会网络语义分析,识别不同情绪下的高频词汇。使用LDA主题模型将评论划分为3个主题(夜景、表演、美食),并分析主题强度随时间变化趋势。实验包含数据采集、预处理、情感分析、语义网络分析和LDA建模等完整流程,为景区管理优化提供数据支持。源代码涵盖爬虫、数据处理和可视化分析的全套实现。

m0_64336780的博客 1万+

把 sy-* 带进 ABAP CDS:ABAP 7.50 里的环境信息新姿势($session 与 @Environment.systemField 实战)

摘要:ABAP 7.50在CDS视图中引入两种获取环境信息的方式:1)直接使用$session会话变量读取用户、客户端和系统语言;2)通过@Environment.systemField注解参数,由Open SQL自动注入系统字段。$session方式简单但依赖Open SQL访问路径,非ABAP环境下可能失效;注解参数方案更工程化,依赖关系明确且支持测试。建议ABAP体系内优先使用$session,对外接口采用参数化方案。两种方式各有适用场景,正确选择可避免潜在风险。(148字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 152

SXU-软件项目管理-朱少民-第九章 项目监控与控制 第十章 项目收尾 附相关习题

软件项目管理-朱少民-第九章 项目监控与控制 附相关习题

weixin_63597914的博客 1488

【MATLAB-app】系列教程(含视频)第4、5、6课:实战_制作简单的图像处理软件

写作时间: 2020-12-27 我的教程目录 第1课:初步了解appdesigner 第2课:学会制作一个计算器 第3课:学习更多的控件(重点!) 第4课:实例1:制作一个图像处理软件 第5课:学习APPdesigner的设计精髓,框架 第6课:结合使用多种控件,函数等,丰富我们的实例1 第7课:app设计打包,完成工程应用导出 标题: 第4课:我的实例_学会制作一个图像处理软件 本文目录: 1.先看看我之前的一个工程 2.常用的基本组件控件 3.最常用且实用的控件的用法 -3.1 editfilel

wind 4052

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

IMSL CNL 7.0.0 (x86-64)Crack

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

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

上一篇: IOS开发小技巧——强大的企业级调试日志——IOS第三方库CocoaLumberjack/CocoaLumberjack(1)
下一篇: IOS_开发技巧_定位反地理编码的一些坑
Abson哥哥
博客等级 码龄11年 4粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值