iOS 中 cell和 label 的自适应高度

2023-05-16

    之前我们使⽤的 cell 一直都是同样的高度,或者某行固定⾼度。 实际开发中经常要让 cell 根据 Model 中文本的长短动态的更改高度
1、获取文本高度
    • 计算一段文本在限定宽高内所占矩形大⼩
      iOS7计算文本⾼度⽅法
      - (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(NSDictionary *)attributes context:(NSStringDrawingContext *)context
      2、注意事项:
        1. 计算文本高度是所用的字体要和label显示时用的字体一致。
        2. label的宽度要和计算时使用的限定宽度一致。
        3. 这样才能保证文本显示在label中时,label高度恰巧够。
      3、cell 自适应高度
        1. tableView:heightForRowAtIndexPath:方法要⽐tableView:cellForRowAtIndexPath先执行。
        2. 所以要提前计算好每⾏行cell需要多少高度。
      主要代码:
                AppDelegate.m文件中:
      #import "AppDelegate.h"
      
      @interface AppDelegate ()
      
      @end
      
      @implementation AppDelegate
      - (void)dealloc
      {
          [_window release];
          [super dealloc];
      }
      
      
      
      - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
          self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
          // Override point for customization after application launch.
          self.window.backgroundColor = [UIColor greenColor];
         
          // 创建一个 lebel
          UILabel *label = [[UILabel alloc] initWithFrame:(CGRectMake(50, 100, 300, 100))];
          label.backgroundColor = [UIColor whiteColor];
          label.font = [UIFont systemFontOfSize:20];
          NSString *str = @" -『为龙』-出自:《Axis Powers Hetalia》王耀中心同人志《为龙》手心上 亘古的月光 那道伤 笑而过的苍凉 翘首觐向 你伫立一方 是你生而为龙的狷狂 谨记你的姓名是炎黄 烽燧上 战地的残阳 断刃旁 岁月悄然的流淌 十二章纹 你遥祭四望 血脉奔腾的黄河长江 是你与生俱来的张扬 风雨打尽红墙和绿瓦 丹青留下明日的黄花 汉字里墨香温存的一笔一划  世代传承的表达 盛衰荣辱斑驳了脸颊 千载过后洗净了铅华 一直坚守的土壤在你脚下 至死不渝的回答 藏心上 亘古的月光 怀中殇 不再回眸的苍凉 翘首觐向 你伫立此方 谨记生而为龙的模样 谨记我的姓名是炎黄";
          label.text = str;
          label.numberOfLines = 0;
          [self.window addSubview:label];
         
          // 计算文字的高度
          // size 需要宽度 是之前定义的 label 的宽度
          // 高度 需要 给一个到不了的大数
          // NSStringDrawingUsesLineFragmentOrigin 按照文本的矩形区域 返回 高度
         
          // 构建一个字体大小的字典
          // 字体大小的字号 一定要跟定义 Label 一样
          NSDictionary *dic = [NSDictionary dictionaryWithObject:[UIFont systemFontOfSize:20] forKey: NSFontAttributeName];
         
          // 计算300宽 30字号的 label 的高度
          CGRect frame = [str boundingRectWithSize:CGSizeMake(300, 1000) options:(NSStringDrawingUsesLineFragmentOrigin) attributes:dic context:nil];
          NSLog(@"%f", frame.size.height);
         
          CGRect newFrame = label.frame;
          newFrame.size.height = frame.size.height;
          label.frame = newFrame;
         
          [self.window makeKeyAndVisible];
          return YES;
      }
      

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

iOS 中 cell和 label 的自适应高度 的相关文章

  • NSURLCache 不缓存

    我正在使用 Xcode 6 1 6A1030 iOS7 和 iOS8 模拟器 NSURLCache 似乎没有缓存任何东西 我使用 Cache Control 标头 我的服务器返回带有 max age 6000 的 Cache Control
  • iOS 如何触发视频退出全屏后继续播放?

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

    我正在尝试在iPhone APP中实现google reader 到目前为止我已经成功收到了sid and auth 当我尝试使用以下命令调用 Endpoints API 时 问题就出现了GET 这是代码 ASIHTTPRequest re
  • TTTAttributedLabel 可点击截断标记

    我有一个 TTTAttributedLabel 并为其指定了一个自定义属性截断标记 NSAttributedString atributedTruncationToken NSAttributedString alloc initWithS
  • 命令 /Applications/Xcode-beta.app/Contents/Developer/usr/bin/atool 失败,退出代码 255

    它发生在新的 Xcode7 beta 中 CompileAssetCatalog Users admin Library Developer Xcode DerivedData InstaAd ddgdnbxlpxipirebpndfmgr
  • 在 Swift 中以编程方式为 iOS 制作带有名字首字母的图像,例如 Gmail

    我需要在 UITableView 中显示与其姓名相对应的每个用户的个人资料图片 在下载图像之前 我需要显示一张带有他名字的第一个字母的图像 就像在 GMail 应用程序中一样 如何在 Swift for iOS 中以编程方式执行此操作 不需
  • 使用 ZBarSDK 时 iPhone 相机失去自动对焦功能

    我正在开发一个应用程序 用户可以选择是否要扫描条形码或拍摄某物的照片 为了拍照 我正在使用UIImagePickerController照常 为了扫描条形码 我使用 ZbarSDK 1 2ZBarReaderViewController 拍
  • 如何在Sprite Kit中实现鼠标关节?

    我已经在 iOS 上用 Cocos2d Box2d 编写了拖放功能的工作实现 我需要将它移植到 Sprite Kit 逻辑非常基本 当用户触摸屏幕时 找到手指下的精灵 在找到的精灵和场景的物理体之间创建鼠标关节 将关节的目标设置为触摸位置
  • 无需越狱即可检测iOS9上哪个应用程序处于前台

    我正在尝试记录用户在 iOS9 上的个人应用程序使用情况 我宁愿它不会使用越狱有限的解决方案 不言自明 在越狱手机上执行此应用程序的变体应该不难 https www andyibanez com create mobilesubstrate
  • 开发者可以在 Windows 应用程序中使用 iCloud 吗?

    开发人员可以使用 Apple 的 iCloud API 在 Mac OS X 和 iOS 上的不同版本的应用程序之间同步应用程序数据 如果开发人员拥有 Windows 版本的应用程序 该版本是否也可以使用 iCloud 将应用程序数据与 M
  • NSUserDefaults 多久同步一次?

    的文档NSUserDefaults说synchronise方法被定期调用 但没有提及频率 10分钟的谷歌搜索没有发现任何信息 发生的频率是多少synchronise方法调用 这是一个未公开的实现细节 可能甚至不是一个恒定的时间间隔 但是 您
  • Socket.io 400(错误请求)

    我的服务器上有这段代码 var express require express var routes require routes var user require routes user var http require http var
  • 重叠的装载机圆

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

    我并不是想解决任何问题 当然你可以设置isAccessibilityEnabled true它有效 我的问题是 为什么它默认关闭并且界面生成器中没有适当的部分 在我看来 不建议使 UITableViewCell 子类可访问 有没有更好的方法
  • 如何向 UIView 添加大小调整手柄?

    我试图根据用户请求在运行时动态创建视图 UIImageView 和 UITextView 然后允许用户移动它们并调整它们的大小 除了调整大小之外 我的一切都工作得很好 我尝试使用捏合手势识别器 但发现它对于我想要的东西来说太笨拙了 因此 我
  • 如何重新定位或移动 Google Maps SDK 上的当前位置按钮?

    如何将 Objective C 中的当前位置按钮移至我的偏好 现在 我已启用它 但底角有东西挡住了它 Thanks 您可以使用 padding 将按钮向上移动 self mapView padding UIEdgeInsets top 0
  • 以弯曲格式显示文本

    我正在寻找以曲线格式绘制一些文本 我使用哪个控件并不重要 UITextField UILabel or UITextView 我只想显示如图所示的文本 仍在寻找解决方案 请帮忙 查看此链接 https nodeload github com
  • 以编程方式从底部裁剪图像

    我正在开发自定义相机应用程序 一切进展顺利 但我在从底部裁剪图像时遇到了问题 即 裁剪后的图像与原始图像具有完全相同的宽度 但高度将为原始图像的 1 3 并且必须从底部开始 斯威夫特3解决方案 func cropBottomImage im
  • UITableView 滑动删除 iOS 上的手势冲突

    我的手势识别器有问题 我的目标是在表视图中实现使用滑动删除 但我认为其他手势是相互冲突的 我正在使用这个库romonthego REFrostedViewController https github com romaonthego REF
  • 企业发行版在 Swift 应用程序中与 iOS8 配合不佳

    我在使用 swift 应用程序在 iOS 8 设备上运行 Enterprise 版本时遇到问题 如果我使用非企业帐户进行代码签名 它似乎工作正常 有人遇到这个问题吗 以下是我在尝试使用企业帐户运行构建以进行协同设计时在 iOS 设备上收到的

随机推荐

  • c++20 ranges库

    ranges库在对元素进行逐一操作或者判断时可以省掉很多循环体 xff0c 使代码的可读性提高 例如 xff0c 要从一个vector中拿出所有的偶数并求平方并逆序排列 xff0c 生成一个新的vector xff0c 以前这样写 xff1
  • Linux : nano: command not found

    nano command not found 这是因为在Linux中没有安装nano而已 我们只需要安装一下就好了 安装命令 yum install nano 遇到选择 一路Y就行了
  • 【Shotcut】用最短路径编辑一个视频

    目录 一 图解最短路径二 新建工程三 导入素材四 编辑视频4 1 图片素材拖入时间线 xff0c 自动添加V1视频轨道4 2 视频素材拖入图片素材后面4 3 时间线添加音频轨道4 4 音频素材拖入音频轨道 xff0c 和视频素材左端对齐4
  • 【Shotcut】画中画_调整大小位置

    目录 一 大小画中画1 1 新建工程1 2 导入素材1 3 将一个视频拖入时间线 xff0c 自动创建V1轨道1 4 Ctrl 43 I 新建V2轨道 xff0c 将另一个视频拖入1 5 将两段视频剪齐1 6 对上面的V2轨道添加Size
  • Docker安装mysql 8 忽略表名大小写,通过命令修改my.cnf配置文件,无需进容器重新初始化数据库

    看了很多博客都是需要先启动容器再进容器内部修改my cnf 重新初始化数据库 xff0c 然而DockerHub直接就对容器启动时设置了my cnf的修改方式 xff0c 具体步骤简单如下 xff1a 官方参考链接 xff1a https
  • 解决 Windows 10 自带虚拟机运行 Ubuntu 18.04 卡顿的问题

    来源 xff1a A guide how to run Ubuntu 18 04 in Enhanced Mode in Hyper V 系统要求 控制端 xff1a Windows 10 xff0c 1803以及之后 受控端 xff1a
  • linux常用命令command not found的解决方案(自己整理)

    1 ifconfig command not found 是因为没有安装此命令包 xff0c 安装方法 xff1a yum install net tools2 sz和rz文件上传命令command not found 执行 xff1a w
  • Window7升级 PowerShell

    一 查看当前PowerShell版本 1 命令行输入powershell 2 命令行输入get host 二 下载新版PowerShell xff08 下载说明 xff1a https docs microsoft com zh cn po
  • MSE(均方误差)函数和RMSE函数

    本文链接 xff1a https blog csdn net qq 36512295 article details 86526799 MSE xff08 均方误差 xff09 函数一般用来检测模型的预测值和真实值之间的偏差 训练集 xff
  • PSNR-峰值信噪比(原理及Python代码实现)

    本文链接 xff1a https blog csdn net leviopku article details 84586446 PSNR的全称为 Peak Signal to Noise Ratio xff0c 直译为中文就是峰值信噪比
  • matlab向量的模

    向量 v 中的元素 v1 v2 v3 vn xff0c 下式给出其幅度 xff1a v 61 v12 43 v22 43 v32 43 43 vn2 MATLAB中需要采按照下述步骤进行向量的模的计算 xff1a 采取的矢量及自身的积 xf
  • 图像阶梯效应

    图像阶梯效应现象产生原因 在利用二阶偏微分方程进行平滑图像过程中 xff0c 有时会出现 阶梯效应 或者是 块效应 即图像处理后某些区域内灰度相同 区域内灰度相同 xff0c 表示该区域任意一点其灰度值的一阶导数为0 这说明随着迭代次数增加
  • 邻接矩阵

    逻辑结构分为两部分 xff1a V和E集合 xff0c 其中 xff0c V是顶点 xff0c E是边 因此 xff0c 用一个一维数组存放图中所有顶点数据 xff1b 用一个二维数组存放顶点间关系 xff08 边或弧 xff09 的数据
  • JavaScript

    1 a 任何数值除以0都会导致错误而终止程序执行 但是在JavaScript中 xff0c 会返回特殊的值 xff0c 因此不会影响程序的执行 比0大的数除以0 xff0c 会得到无穷大 xff0c 所以js用infinity来x显示出来
  • -操作系统

    1进程同步的引入背景 xff1a 在多道程序环境下 xff0c 进程是并发执行的 xff0c 不同进程之间存在这不同的相互制约关系 为了协调进程之间的相互制约关系 xff0c 引入了进程同步的概念 2在有n个进程共享一个互斥段 xff0c
  • -网络基础

    1 物理层 xff1a RJ45 CLOCK IEEE802 3 xff08 中继器 集线器 网关 xff09 数据链路 xff1a PPP FR HDLC VLAN MAC xff08 网桥 xff0c 交换机 xff09 网络层 xff
  • 恒生面试准备

    目录 1 flex布局 2 vue的特性有哪些 xff1f 3 Vue中父子组件的传值的方式有几种 xff1f 它们有什么数据上的限制 4 项目中用了vue组件传值的方式有哪些 5 项目中用到的组件 6 浏览器输入url到渲染网页的过程 7
  • 同程艺龙一面

    目录 1 说说HTML5 2 link标签要放到head之后 xff0c script标签要放到body标签结束之前 xff0c 为什么 3 HTML语义化重要性 4 meta中的viewport干嘛的 5 P标签中的文字如何水平垂直居中
  • 杭州端点一面

    目录 1 vue双向绑定 2 Promise了解过吗 xff1f promise all解释一些 xff0c 为什么可以链式回调 3 let和var的区别 4 深拷贝和浅拷贝区别和实现方式 5 父子组件传值 6 了解webpack吗 xff
  • iOS 中 cell和 label 的自适应高度

    之前我们使 的 cell 一直都是同样的高度 或者某行固定 度 实际开发中经常要让 cell 根据 Model 中文本的长短动态的更改高度 1 获取文本高度 计算一段文本在限定宽高内所占矩形大 iOS7计算文本 度 法 CGRect bou