我正在开发一个ios应用程序,并使用autolayout我正在尝试创建一个具有不同行高的表视图 .

原型单元的布局如下:

我有一个主单元格(黑色)里面有一个UIView(红色),里面有一个UILabel(蓝色)

我添加的Autolayout约束如图所示:

The UIView has the following Constraints:

80到单元格的左边缘

从单元格的右边缘

20

从单元格的上边缘

15

从单元格的底部边缘

15

The UILabel has the following Constraints:

20到UIView的左边缘

从UIView的右边缘

15

从UIView的上边缘

10

从UIView的下边缘

10

我需要UILabel根据其内部的文本大小在高度上动态 . 为此,我做了以下事情:

将UILabel的行数设置为0

将字体设置为Helvetica Neueu,大小为15(在界面构建器中)

将Lines Break设置为"Word wrap"(在界面构建器中)

在视图Controller中,我实现了以下内容:

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

{

//get the item

ListItem *item = (ListItem*) self.items[indexPath.row];

//calculate the label size based on the item title that we will display

CGSize textSize = [item.title sizeWithFont:[UIFont fontWithName:@"HelveticaNeue" size:15.0] constrainedToSize:CGSizeMake(tableView.frame.size.width - 135.f, 9999.f) lineBreakMode:NSLineBreakByWordWrapping];

//return the height + the 50 to accomodate with the layout

return textSize.height + 50.f;

}

基本上我正在做的是获取我需要显示的文本(item.title),我调用 sizeWithFont 来计算我需要多少空间用于该标签并返回它 .

在sizeWithFont方法中,我传递我用于 Headers [UIFont fontWithName:@"HelveticaNeue" size:15.0] 的字体,然后根据图片约束约束计算的大小,获取tableView的宽度并减去边距以获得标签

对于宽度:我减去80(对于UIView左)和20(对于标签左)和15(对于标签右)和20对于UIView右)

对于高度我放9999,因为我不需要约束它来进行计算 .

在我得到所需标签的大小后,我返回了确切的高度加上标签的垂直边距为15,10,10和15(总计= 50) return textSize.height + 50.f;

The problem:

虽然我正在进行精确计算,但在运行应用程序时,它并非100%精确 . 虽然大多数情况下我得到一个精确的高度,但在某些情况下(特别是当我们在标签中有例如3行,而第3行有一个单词时),单元格的高度仅对应于2行并且切割第三行一 . 通过试验和错误增加高度可能是可能的,但它也会影响显示良好的细胞的高度 .

所以我的问题是,我的计算错误是什么?当使用autolayout时,有没有办法根据标签中的文本为单元格设置动态高度?

谢谢

java精确测量文本高度_基于文本精确计算UITableViewCell的高度相关推荐

  1. 递归计算二叉树的高度_如何使用递归方法计算二叉树的高度

    递归计算二叉树的高度 Previously I wrote about an algorithm for finding out the height of a binary tree using i ...

  2. java项目----教务管理系统_基于Java的教务管理系统

    java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...

  3. 模型计算算力_8核人工智能开源主板_基于 BITMAIN AI 计算模组_3.5寸

    模型计算算力_8核人工智能开源主板_基于 BITMAIN AI 计算模组_3.5寸 产品概述 产品特点 1. 超高性能,超低功耗 2.体积小,接口丰富,灵活扩展 3.开发环境友好,工具链完备 应用场景 ...

  4. java生成pdf旋转_基于Java实现PDF文本旋转倾斜

    本文介绍通过Java程序在PDF文档中设置文本旋转.倾斜的方法.设置文本倾斜时,通过定义方法TransformText(page);并设置page.getCanvas().skewTransform( ...

  5. python爬小红书_基于文本分析和SEM模型的小红书用户粘性研究

    基于文本分析和 SEM 模型的小红书用户粘性研究 文/曹增栋 罗迪维 杨炳新 王心贝 [摘 要] 摘要:本文利用 Python 软件爬取小红书用户评论的 27900 条数据, 通过 jieba 分词提 ...

  6. php文本式留言,基于文本的留言簿_php

    固然基数据库的留言簿可以作得很漂亮,而且也更好管理. 但是对于那些没有数据库空间的朋友们来说,基于文本的留言簿也完成可以适用于个人站来使用.而且只要我们努力去做同样可以做得很好,甚至可以说丝毫不比基于 ...

  7. java五子棋游戏设计_基于Java的五子棋游戏的设计

    摘  要 五子棋作为一个棋类竞技运动,在民间十分流行,为了熟悉五子棋规则及技巧,以及研究简单的人工智能,决定用JAVA开发五子棋游戏.主要完成了人机对战和玩家之间联网对战2个功能.网络连接部分为Soc ...

  8. python万年历节气_用Python精确计算100年内二十四节气日期

    这两天在做万年历app的项目,其中有一项需要获得二十四节气的精确日期. 因为这个二十四节气日期在项目中用到的地方比较多(主要是精确计算某一天的年月日天干这方面):而且二十四节气计算的具体情况又特别复杂 ...

  9. java 复制文本内容_基于java文本复制的7种方式总结

    如下所示: package copy; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import ...

最新文章

  1. android 搜索框 github,Github上Android简单好用的提示框推荐 | 夕辞
  2. Linux基础命令---shutdown
  3. 文计笔记 4 字符编码与数制
  4. SAP CRM WebClient UI表格编辑模式的调试明细
  5. python getattr_Python 内置方法和属性应用:反射和单例
  6. 使用class-validator替换Joi包的方法
  7. C++语言类的继承与派生介绍和示例
  8. linux 版本号 加号,Linux kernel编译生成的版本多一个加号“+”
  9. C程序设计--排序(冒泡、选择、插入)--选择
  10. android手机模拟鼠标控制pc,利用Android手机仿真PC鼠标的设计与实现
  11. 基于Bootstrap+Django+Python的点菜信息管理系统
  12. 计算机网络基础知识总结,就这一篇了
  13. 计算机的排版方法,计算机编辑排版系统及其方法
  14. 如何正确nandflash的块地址和页地址
  15. Sticky footer布局
  16. jquery input标签中 中checkbox全部选中与全部取消
  17. kali-linux-2022 下载/系统/权限/中文/配置/换源等问题一次解决
  18. 如何有效设计你的调查问卷?
  19. 安卓flash插件_Flash 终将谢幕:微软将于年底停止对 Flash 的支持
  20. java 后台打开新页面_Java后台打开浏览器窗口

热门文章

  1. AJAX Tookits -- ConfirmButton
  2. HTTPS协议在Tomcat中启用的配置
  3. Android 上下文菜单(Context Menu)
  4. jquery GET POST
  5. 再谈angularjs DI(Dependency Injection)
  6. GridView 利用AspNetPager 分页时的自动编号
  7. 实现sessionfilter_session应用--采用filter和session实现简单用户权限控制
  8. java中怎么判断一段代码时线程安全还是非线程安全_Java 中的多线程你只要看这一篇就够了...
  9. echarts vue 柱状图实例_VUE中使用Echarts绘制柱状图
  10. mysql strtok,strtok()和strtok_r()