sizeToFit() 返回错误的高度 - 需要在 heightForRow 中查找单元格宽度

2023-12-13

我正在尝试根据内容制作具有动态单元格高度的 UITableView。我的应用程序是一个文章查看器。我尝试用这些函数计算单元格的高度。

func heightForView(text:String, font:UIFont, width:CGFloat) -> CGFloat{
    let label:UILabel = UILabel(frame: CGRectMake(0, 0, width, CGFloat.max))
    label.numberOfLines = 0
    label.lineBreakMode = .ByTruncatingTail
    label.font = font
    label.text = text

    label.sizeToFit()
    return label.frame.height
}

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    let post = FeedController.sharedController.allPosts[indexPath.row]
    var height = 16.0
    if post.hasImage {
        height += Double(self.view.frame.width) / (4/3)
    }

    let titleH = heightForView(post.title!, font: UIFont(name: "LiberationSerif-Bold", size: 20.0)!, width: self.tableView.bounds.width)
    let descH = heightForView(post.desc!, font: UIFont(name: "LiberationSerif", size: 17.0)!, width: self.tableView.bounds.width)

    let totalHeight = CGFloat(height+Double(titleH)+Double(descH))

    print("imageH: \(height), titleH: \(titleH) detailH: \(descH) totalH:\(totalHeight)")
    return totalHeight
}

当我运行它时,它看起来像这样,如您所见,底部标签被切断。

enter image description here

我通过接口断点运行了它,在这里你可以看到错误的原因:

enter image description here

渲染的尺寸比 sizeToFit() 估计的尺寸大一号,正如您从我的日志语句中看到的那样:

imageH: 297.25, titleH: 44.5 detailH: 56.5 totalH:398.25

我怀疑这个计算错误的原因是我为 heightForView 函数提供了错误的宽度参数。我尝试过使用 tableView.contentSize 和许多其他东西。 lineBreakMode 在我的故事板和代码中是相同的。

我想我需要的是一种更好的方法来找到单元格的预期宽度,或者任何其他可以给我正确的预期高度的解决方案。


Edit: Constraints: enter image description here


自动尺寸

使用更少的代码(*),您可以放弃heightForRowAtIndexPath完全,并使用autolayout对于一切。

  1. 不要覆盖heightForRowAtIndexPath(所有代码都消失了)
  2. 告诉表视图来完成艰苦的工作(在viewDidLoad例如):
    self.tableView.estimatedRowHeight = 88
    self.tableView.rowHeight = UITableViewAutomaticDimension

(*)2 lines准确地说,是代码。通过比较来说服自己2线解决方案反对多种方法覆盖解决方案.


保证金注意事项

  • XIB & storyboard:您有能力控制约束及其与裕度的关系。
    使用时请注意相对于保证金,项目顺序很重要,因为边距通常是插图。 看https://stackoverflow.com/a/25420909/218152了解一些细节。

  • storyboard:您可以访问额外的topLayoutGuide and bottomLayoutGuide属性来自IB,这可能对您的视图控制器有价值,但对您来说是偏离主题的UITableViewCell.

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

sizeToFit() 返回错误的高度 - 需要在 heightForRow 中查找单元格宽度 的相关文章

  • NSString stringWithContentsOfFile 失败,错误代码似乎错误

    我正在尝试将文件加载到字符串中 这是我正在使用的代码 NSError error nil NSString fullPath NSBundle mainBundle pathForResource filename ofType html
  • iOS - 如何在 swift 中使用 `NSMutableString`

    我已经看过这段 Objective C 代码 但我很难在 swift 中做同样的事情 NSMutableAttributedString res self richTextEditor attributedText mutableCopy
  • 如何找到键盘未覆盖的视图部分(UIModalPresenationStyleFormSheet)?

    我有一个视图控制器 显示带有 UITextView 的视图 并且我想在键盘出现时调整视图的大小 以便 UITextView 不会被键盘覆盖 我几乎在所有情况下都可以正常工作 据我所知 仅当视图控制器以 ModalPresentationSt
  • .showsPhysics 内存泄漏

    我最近花了 5 个小时尝试调试 Spritekit 应用程序中的内存泄漏 应用程序启动后 我注意到内存使用量略有上升 我花了 5 个小时中的 3 个小时挖掘参考资料 了解强与弱的关系ARC https developer apple com
  • Swift SpriteKit edgeLoopF​​romRect 问题

    下面的代码可以识别底部和顶部边缘场景和球按预期弹开 但是 那左边缘和右边缘现场的情况一直被破坏 如果施加足够的力 球会离开屏幕 然后最终返回 就好像场景的边缘超出了 iPhone 模拟器窗口的边缘 import SpriteKit clas
  • 有关 Swift 编译器选项的文档

    您好 我想开始在 Apple Swift 语言上运行一些微基准测试 然而 我觉得很难找到有关编译器优化的不同选项的适当文档 我读过很多关于其他人的语言微基准的问题和文章 但是如果能有一些关于该主题的可靠文档那就太好了 在最新的测试版中 使用
  • 从一个模态视图无缝翻转到另一个模态视图,而不显示纯色背景

    我的 iPad 应用程序的 UI 如下 当我点击Settings按钮 我希望对话框水平翻转以显示设置对话框 我这个工作正常 但是 当对话翻转时会显示背景颜色 如你看到的 有什么办法可以让对话框翻转时不显示该颜色块吗 我希望它看起来更加无缝
  • 每 24 小时触发一次方法

    我正在尝试每天在给定时间触发一个方法 我尝试了一些方法 但我无法真正使其发挥作用 任何意见 将不胜感激 此外 如果无论应用程序是否打开它都会触发 那就更理想了 这可能吗 UI本地通知 http developer apple com lib
  • 使用未解析的标识符“FlurryAdInterstitial”

    我正在尝试整合Flurry Interstitial Ads使用cocoapods in Swift and Xcode 7 1 1 我正在关注开发人员雅虎网站上的此文档 https developer yahoo com flurry d
  • 在 iPhone 3GS 与 iPhone 4 上为 Mobile Safari 嵌入 HTML5 视频

    我在服务器上的 mp4 文件中有 H 264 AAC 编码的视频 mime 类型的视频 mp4 添加到 Web 服务器 IIS 7 并且我有一个带有视频标签的页面
  • 从命令行添加 Xcode 开发者帐户

    我正在尝试使用xcodebuild allowProvisioningUpdates在我只能通过命令行访问的计算机 Azure Devops macOS 托管计算机 上 不幸的是 根据man xcodebuild为了使用 allowProv
  • AVAssetExportSession 无法导出从 iCloud 下载的视频

    我正在尝试创建从用户相册中选择的视频的缩小版本 输出的最大尺寸为 720p 因此 在检索视频时 我使用 mediumQualityFormat as the deliveryMode 如果用户设备中不存在原始视频或其中等质量版本 这会导致
  • 调整 UIImage 的大小而不将其完全加载到内存中?

    我正在开发一个应用程序 用户可以在其中尝试加载非常非常大的图像 这些图像首先在表格视图中显示为缩略图 我的原始代码会在大图像上崩溃 因此我重写它以首先将图像直接下载到磁盘 是否有一种已知的方法可以调整磁盘上图像的大小 而无需通过以下方式将其
  • watchOS 错误:控制器接口描述中的未知属性

    我将 WKInterfacePicker 添加到情节提要中 并将其连接到界面控制器中的 IBOutlet 运行应用程序时 它在控制台中显示一条错误消息 控制器的接口描述 watchPicker 中的未知属性 Code interface I
  • 根据一个数组对多个数组进行排序

    如何根据数组对一堆数组进行排序createdAt 例如 2015 11 02 19 19 35 0000 将它们组合成另一种类型 字典 以便在 tableView 中使用是否有益 如果有的话如何 var comment AnyObject
  • 在 UIWebView 中播放 Facebook 视频

    有谁知道如何在 Facebook 上播放视频UIWebView 我的应用程序将视频上 传到 Facebook 并检索视频的网址 我想将此网址嵌入到UIWebView播放 我已经为 youtube 解决了这个问题 但没有为 Facebook
  • 如何使用 RX 应用宽限时间?

    我有一个Observable
  • iOS:如何知道 reloadData() 已完成其任务?

    我想滚动到给定索引 self boldRowPath 但是当我调试时scrollToRow之前执行reloadData 如何知道reloadData已完成 func getAllTimeEvent self arrAllTimeEvent
  • CoreBluetooth:检测设备超出范围/连接超时

    我正在设计一个 iOS 框架来处理多个 BLE 设备 均为同一类型 目前一切都运行良好 除了一件事 客户想要一个包含可用设备的列表 但是 我如何检测过去发现的设备何时不再可用 当我尝试连接到不再可用的设备时 会出现另一个问题 文档说 连接尝
  • ios - 如何声明静态变量? [复制]

    这个问题在这里已经有答案了 C 中声明的静态变量如下 private const string Host http 80dfgf7c22634nbbfb82339d46 cloudapp net private const string S

随机推荐

  • 在 MATLAB 中总结 Dice

    我的函数 RollDice 模拟给定数量的六面骰子滚动给定的次数 该函数有两个输入参数 即每次实验中掷骰子的数量 NumDice 和掷骰子的总次数 NumRolls 该函数的输出将是长度为 NumRolls 的向量 SumDice 其中包含
  • ReferentialConstraint 中的依赖属性映射到存储生成的列

    写入数据库时 出现此错误 ReferentialConstraint 中的依赖属性映射到 存储生成的列 列 付款 ID public bool PayForItem int terminalId double paymentAmount e
  • UTF-8 字符集不适用于 javax.mail

    我用过Java 邮件 API 用于发送电子邮件 我正在使用联系人公式发送输入 该输入必须发送到特定的电子邮件 尽管我是丹麦人 但电子邮件发送没有问题 因此我需要在主题和电子邮件文本中使用三个丹麦字符 即 和 因此 我发现我可以使用 UTF
  • 为什么我的日志位于 std 命名空间中?

    在下面的代码中 我定义了一个简单的log功能 在main I try not调用它 我打电话std log 尽管如此 我自己的log叫做 我看到 日志 在屏幕上 有谁知道为什么 我使用 G 4 7 和 clang 3 2 include
  • jsTree 在 IE8 中的显示缺陷

    我一直在使用 jsTree 并在 IE8 中遇到问题 所有数据都在树中正确显示 但是当我尝试折叠树的分支时 它无法正确显示 也就是说 发生了平滑的折叠动画 但随后数据在不应该可见的时候再次可见 相同的代码在 Firefox 3 6 27 和
  • 如何在Google电子表格中记录删除事件[重复]

    这个问题在这里已经有答案了 我需要使用 Google Apps 脚本在 Google 电子表格中记录删除事件 删除单元格或整行 并获取单元格编号和用户名 功能onEdit e 在编辑单元格时触发 而不是在删除单元格时触发 function
  • IntelliJ 中 Github 推送失败

    我使用我的新 github 帐户在我的项目中通过 github MacOS 桌面创建了 2 个存储库 但是当我尝试通过 IntelliJ 推送提交时 出现 403 错误 但我可以在 github Desktop 中成功推送 远程 aui C
  • 使用enable_if选择类构造函数[重复]

    这个问题在这里已经有答案了 考虑以下代码 include
  • 如何制作可折叠丝带?

    我正在寻找一种对可折叠丝带进行编程的方法 所以我这里有这段代码 ribbon position absolute top 20px right 0 padding 15px ribbon content position relative
  • 使用 Selenium 访问 Shadow DOM 树

    是否可以使用 Selenium Chrome webdriver 访问 Shadow DOM 中的元素 正如预期的那样 使用普通的元素搜索方法不起作用 我已经看到了对切换到子树w3c 上的规范 但找不到任何实际的文档 示例等 有人在这方面取
  • Networkx:绘制平行边

    使用以下代码从数据框中绘制图表 import pandas as pd import networkx as nx df pd DataFrame id emp 13524791000109 12053850000137 470782100
  • 禁用所有移动设备中的滚动

    这听起来好像互联网上应该有一个解决方案 但我不知道为什么我找不到它 我想禁用移动设备上的水平滚动 基本上试图实现这一目标 body overflow x hidden disable horizontal scrolling 这可能是相关信
  • 在matlab中将链接插入图像?

    我想在 matlab 中的图像中添加指向文档的链接 我有一个特定的区域 我想放置链接 例如 我希望图像中 x 40 y 120 处的位置有文档地址的链接 类似于下面的内容 我知道这不是正确的 matlab 代码 text 40 120 a
  • Qt和gcov,不生成覆盖率文件

    我正在尝试获取我为 Arora 浏览器编写的组件的代码覆盖率 该组件是使用 C 和 Qt 框架编写的 我无法使用 gcov 程序 无论是在 Gnu Linux 还是 Mac Os X 下 我尝试了在互联网上找到的所有内容 还通过强制自动编辑
  • Heroku rake db:migrate 不创建表 (Rails 5)

    我有一个 Rails 5 应用程序 我想销毁并重建我的实时数据库 网站尚未启动 所以我遵循了应该有效的步骤 它们过去曾经有效 heroku pg 重置 HEROKU POSTGRESQL HEROKUCOLOR URL confirm 应用
  • 如何在javascript中获取该元素的innerHTML?

    很简单的问题 我有一个元素 标签 它有一个 onclick 来调用 JavaScript 函数 除此之外 我希望这个函数能够回显调用它的元素的innerHTML 因此 在这种情况下 atag 的innerHTML 我该怎么做呢
  • 如何为组创建属性并在 hdf5 文件系统中访问它们?

    我想在 hdf5 文件中创建两个组 第一组 h5md团体简介和 颗粒 脂质组组2描述 前者仅包含一个直接属性 版本 1 0 和两个组创建者和作者及其属性 因此这里没有数据集 在 粒子 脂质组中 唯一缺少的部分是盒子组盒组说明 最少的信息是两
  • 如何围绕任意点旋转一组 2D 形状

    我正在创建一个 Body 类 它将一堆 2D 形状组合在一起 形成一个可移动 可旋转的主体 我需要知道的是如何旋转每个单独的形状 使其看起来像是整个身体都在旋转 而不是每个形状都围绕其中心旋转 我不能只是将每个形状的旋转中心更改为同一点 因
  • 带有开始和停止按钮的 Google Sheets 秒表

    我是 Google Apps Script 和 Java 的初学者 但我需要 Google Sheets 中的秒表 具有启动和停止功能 理想情况下 该按钮应该是一个切换按钮 这样我只需一个按钮即可启动和停止秒表 并且应该显示时间 有人可以帮
  • sizeToFit() 返回错误的高度 - 需要在 heightForRow 中查找单元格宽度

    我正在尝试根据内容制作具有动态单元格高度的 UITableView 我的应用程序是一个文章查看器 我尝试用这些函数计算单元格的高度 func heightForView text String font UIFont width CGFlo