iOS tableView cell高度自适应 两种方法

2023-05-16

最近在开发遇到cell高度不确定的情况,主要原因是cell里面的label的高度是不确定。从而导致cell高度不确定。

 

 

我找到了两种解决方案。第一种 利用iOS8的新特性,自动计算cell的高度。第二种 自己计算每个cell的高度。

下面我们来一个一个演示:

第一种方法:利用iOS7 的新特性

首先我们先创建一个tableView:

viewDidload创建tableView

大家注意 :tableView.estimatedRowHeight=44.0;

tableView.rowHeight=UITableViewAutomaticDimension;//高度设置为自适应

这两行代码就是把tableView 的高度设置为自适应的了

tableView的代理及数据源方法

注意:如果tableView rowHight设置为自适应,那么就需要在代理里面设置cell的高度了,换而言之,就是不用再调用-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 这个方法。

接下来的问题来了,它是怎么计算cell的高度呢,它是根据布局来计算的。

我们把高度不确定的label的高度 设置为大于等于当前高度,并且把label的行数设置为0

 

高度设置为大于等于

行数设置为0

这样,label的行数就是无限行,label的高度就可以随着行数的变化而变化。

还有一点需要注意的,系统计算cell的高度,必须要知道,当前cell 内控件的高度及cell控件之间竖直之间的距离,所以,在布局的时候下图的约束必须要加的。不然高度计算会不对。

这是第一种方法。

第二种方法,我当初的想法是,在-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 的方法里直接遍历cell里面的控件,拿到cell控件的高度,计算cell的高度。

 然而这种方法是不可行的。理由如下:heightForRowAtIndexPath这个代理方法,在(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath 这个代理方法前调用,所以压根取不到当前的cell,cell压根没有创建,会导致崩溃。

于是我就换了一种方法,把计算高度的方法写在model里面。

每个model对应一个cell ,每个model里面都包含cell控件的值,我在model里面添加计算高度的方法。

我们怎么确定cell的高度,我们来分析一下,cell的高度 = titleLabel的上边距 + titleLabel的高度 +titleLabel的下边距 + descLabel的高度 + descLabel的下边距。

现在唯一不确定的是descLabel的高度,因为他的高度是可变的,所以我们只要计算他的高度,在加上其他已经确定的值就好了。

那么 怎么计算descLabel的高度呢。 根据 boundingRectWithSize这个方法,根据lable的字体大小,计算出label的高度。

接下来,在-(CGFloat)tableView:(UITableView*)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath 方法里 取出每个cell的高度。

第二种方法完成了。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS tableView cell高度自适应 两种方法 的相关文章

  • iOS 如何触发视频退出全屏后继续播放?

    我正在构建一个在 iOS 中播放视频的网站 我有一个在 iOS 中工作的全屏按钮 但是退出全屏时视频会暂停 有谁知道一种方法可以强制视频在退出全屏时继续播放 或者如何设置一个侦听器来触发视频在退出全屏时自动播放 这是我的代码
  • TTTAttributedLabel 可点击截断标记

    我有一个 TTTAttributedLabel 并为其指定了一个自定义属性截断标记 NSAttributedString atributedTruncationToken NSAttributedString alloc initWithS
  • 使用 ZBarSDK 时 iPhone 相机失去自动对焦功能

    我正在开发一个应用程序 用户可以选择是否要扫描条形码或拍摄某物的照片 为了拍照 我正在使用UIImagePickerController照常 为了扫描条形码 我使用 ZbarSDK 1 2ZBarReaderViewController 拍
  • UILabel 中的文本未垂直居中

    我使用以下代码创建了一个标签 func setupValueLabel valueLabel numberOfLines 1 valueLabel font UIFont name Avenir Black size 50 valueLab
  • removeItemAtPath 完成

    我正在以这种方式删除路径上的文件 UIPanGestureRecognizer gesture UIPanGestureRecognizer sender UIButton button UIButton gesture view UIPa
  • XCode 7 中的 AWSS3TransferManagerUploadRequest

    我今天升级到 Xcode 7 Swift 2 0 我的项目正在使用 CocoaPods 我正在 POD 文件中导入所有与 AWS 相关的文件 我已经设置了桥接标头 并导入了 Amazon 告诉我的所有文件 在升级到 Swift 2 0 之前
  • cordova插件条码扫描仪打不开扫描

    我的条形码扫描仪插件有问题 我不是天才 我不太了解如何编写网络应用程序 我使用phonegap和cordova 并且尝试制作一个网络应用程序 在单击链接后扫描条形码 我之前已经使用此命令行安装了该插件 cordova plugin add
  • 当 ViewController 从 UIStoryboard 实例化时,isMemberOfClass 返回 no

    我有一个 OCUnit 测试类 PatientTestViewControllerTests 下面是界面 interface PatientTestViewControllerTests SenTestCase property nonat
  • 子类 PFObject 上的 PFUser 属性

    我使用以下类 动态属性以及 m 文件中的 load 和 parseClassName 方法 对 PFObject 进行了子类化 interface DAOpponents PFObject
  • 如何观察UserDefaults的变化?

    我有一个 ObservedObject在我看来 struct HomeView View ObservedObject var station Station var body some View Text self station sta
  • 从 NavigationController 中删除 ViewController 后 AVPlayer 继续播放

    因此 我在项目中使用 ARC 当我添加 AVPlayerLayer 时 它工作得很好 但当我从 UINavigationItem 中弹出 UIViewController 时 视频继续在后台播放 有谁知道你会如何处理这个问题 这似乎是一件很
  • 在 Xcode5 中使用 XCTest 时 AFNetworking 导致错误

    我正在使用 Xcode 5 现在刚刚开始对现有项目进行单元测试 为此我添加了CocoaTouch Unit Testing Bundle作为我的项目的目标 目标名称是 MyAppTests 我之前使用添加了 AFNetworking 库Co
  • 重叠的装载机圆

    我试图重现苹果为应用程序 活动 制作的重叠圆圈 见下图 如果您使用标准贝塞尔路径 起始 结束位置将仅在 0 到 2PI 之间产生影响 例如 如果您尝试填充 4PI 即使使用一些阴影 则无法模拟重叠加载 如何制作类似于苹果解决方案的东西来创建
  • 如何解决malloc_error_break?

    我在 iOS 3 0 模拟器上遇到此错误 但在 3 1 3 和 3 2 模拟器上没有遇到此错误 创建符号断点后malloc error break 我在日志中看到了这一点 Session started at 2010 02 13 19 1
  • iOS UITableViewCell cell.imageView 设置圆角

    嘿我正在尝试设置cell imageView s cornerRadius 但似乎不起作用 cell imageView layer cornerRadius 9 它会起作用还是我应该添加自定义UIImageView在我的牢房里有圆角吗 我
  • 使用 AVFoundation 裁剪 AVAsset 视频

    我在用AVCaptureMovieFileOutput录制一些视频 我使用显示预览层AVLayerVideoGravityResizeAspectFill稍微放大 我遇到的问题是最终的视频较大 包含预览期间不适合屏幕的额外图像 这是预览和生
  • 如何在iOS的Delphi程序中使用IPv6协议

    我尝试在我的移动程序中使用 IPv6 协议 我的服务器位于 NAT 后面的 LAN 内 在服务器上我使用IP端口3000 我已经组织了从路由器端口 45500 到服务器端口 3000 的虚拟服务器 端口转发 在服务器上 我运行 ipconf
  • 从 Mac 命令行访问 iOS 应用程序目录(沙箱)

    我需要使用 Mac 或 Linux 上的命令行 非 GUI 访问 iOS 设备上安装的应用程序的沙箱目录 这有助于开发和测试自动化 将 json 文件放入沙箱中可以让我设置参数 例如额外的调试消息和更小的刷新间隔 像 iFunBox 这样的
  • ios - Gamekit 的 GKOctree 未找到元素

    我正在尝试使用GKOctree https developer apple com documentation gameplaykit gkoctree用于高效检索 3D 空间中的对象 然而 以下代码似乎没有按预期工作 import Gam
  • 在 HTML5 iOS 7 / iOS 8 中显示十进制键盘

    经过几个小时的搜索后 我只是有一个简单的问题 是否有可能在网络浏览器输入字段中显示小数键盘 input type number 只显示数字 但我需要在左下角使用逗号或点 我尝试过任何事情 pattern step等等 但没有显示十进制键盘

随机推荐

  • 如何在 Ubuntu 20.04 上安装 GCC(build-essential)

    本文最先发布在 xff1a https www itcoder tech posts how to install gcc on ubuntu 20 04 GNU 编译器集合是一系列用于语言开发的编译器和库的集合 xff0c 包括 C C
  • 如何在 Ubuntu 20.04 上安装和配置 Redis

    本文最先发布在 xff1a https www itcoder tech posts how to install and configure redis on ubuntu 20 04 Redis 是一个开源的在内存存储键值对数据的存储程
  • 如何在 Ubuntu 20.04 上安装 PHP

    本文最先发布在 xff1a https www itcoder tech posts how to install php on ubuntu 20 04 PHP 是世界上使用广泛的服务端编程语言之一 很多著名的 CMS 和框架 xff0c
  • 用python轻松完成一个分布式事务TCC,保姆级教程

    什么是分布式事务 xff1f 银行跨行转账业务是一个典型分布式事务场景 xff0c 假设A需要跨行转账给B xff0c 那么就涉及两个银行的数据 xff0c 无法通过一个数据库的本地事务保证转账的ACID xff0c 只能够通过分布式事务来
  • 如何在 Ubuntu 20.04 上安装 Spotify

    本文最先发布在 xff1a https www itcoder tech posts how to install spotify on ubuntu 20 04 Spotify是一个音乐流媒体服务商 xff0c 它可以让你和无数的歌曲亲密
  • SSH 操作实践指南

    本文最先发布在 xff1a https www itcoder tech posts ssh practice SSH 是我们经常要和远程服务器交互使用的工具 下面是一些实践中总结的 SSH 操作经验 xff1a 一 如何选择 SSH ke
  • 如何在 Ubuntu 20.04 上安装 R

    本文最先发布在 xff1a https www itcoder tech posts how to install r on ubuntu 20 04 R 是一门开源编程语言和自由的环境 xff0c 主要用于统计分析 绘图 它由 R 基金会
  • 如何在 Ubuntu 20.04 上安装 Mono

    本文最先发布在 xff1a https www itcoder tech posts how to install mono on ubuntu 20 04 Mono 是一个平台 xff0c 基于 ECMA ISO 标准 xff0c 用于开
  • 如何在 Ubuntu 20.04 上安装和使用 Composer

    本文最先发布在 xff1a https www itcoder tech posts how to install and use composer on ubuntu 20 04 Composer 是一个 PHP 依赖管理器 xff08
  • 3分钟在线开通优惠费率的微信支付商户号(商户收款码)

    1 问 xff1a 为什么要开通微信商户号 xff1f 答 xff1a 因为微信个人收款 xff0c 不支持信用卡支付 xff0c 无法提供经营报表 xff0c 无法支持线上支付等 关于微信个人收款码与商家码区别 xff0c 参考 xff1
  • 设置git使用vimdiff比较差异

    原文 xff1a http hi baidu com drdr blog item 57de1e95665a81047af48062 html 修改git的如下2条配置 xff1a git config global diff tool v
  • YUV图像格式

    原文 xff1a http blog csdn net zhongnanjun 3 article details 3934938 YUV xff08 亦称YCrCb xff09 是被欧洲电视系统所采用的一种颜色编码方法 xff08 属于P
  • mime types 大全--来自ubuntu /etc/mime.types

    MIME TYPES and the extensions that represent them The format of this file is a MIME type on the left and zero or more fi
  • VUE3中运用axios处理后端数据

    xff08 1 xff09 在src下新建一个http文件夹 xff0c 文件夹下新建一个index js xff08 2 xff09 在index js文件中引入axios xff08 3 xff09 在index js里面写axios实
  • leveldb性能调优

    许多的nosql都使用leveldb或者类似leveldb的系统作为存储引擎 xff0c 例如tair xff0c hbase xff0c canssandra xff0c 因此理解并调优存储引擎可以大大的提高系统的性能 前一篇大致介绍了原
  • Android 重启 不开机 Backtrace 分析

    此文摘自 mtk online Android 在发生crash 时可以通过 backtrace 定位发生的的位置 xff0c 方便进一步来 fix issue 1 Java Backtrace 从Java Backtrace 我们可以知道
  • SQL Server 2016 OPENJSON忽略大小写

    使用WITH子句OPENJSON将输入JSON表达式中的键与该WITH子句中的列名进行匹配 xff0c 是区分大小写 xff0c 可以使用条件聚合以忽略大小写 xff1a DECLARE 64 JSON varchar max 61 39
  • 论文解读:自适应参数控制方案介绍——Effect Assessment

    Adaptive Probabilities of Crossover and Mutation in Genetic Algorithms TCYB 1994 动机自适应 p c p c
  • SHELL自动化运维

    第1章 shell脚本 1 1 shell 简介 shell 的定义 xff1a span class token number 1 span 在计算机科学中 xff0c Shell就是一个命令解释器 span class token nu
  • iOS tableView cell高度自适应 两种方法

    最近在开发遇到cell高度不确定的情况 xff0c 主要原因是cell里面的label的高度是不确定 从而导致cell高度不确定 我找到了两种解决方案 第一种 利用iOS8的新特性 xff0c 自动计算cell的高度 第二种 自己计算每个c