ios - 使用带有 AutoLayout 的 UICollectionView 实现聊天布局

标签 ios swift uicollectionview uicollectionviewlayout

我在这里尝试实现的目标是否可行?我一直在寻找几个小时的示例代码和/或 SO 答案,这些代码和/或 SO 答案足以证明这一点,但到目前为止还没有成功。

目标:实现类似于这个模拟的东西:

Tableview-ish layout with dynamic-height cells

是的,我知道使用 tableview 很容易,但完整的设计包括自定义交互、多列、UIKit 动态和添加/删除单元格时的自定义动画,因此 UICollectionView 是更好的选择。不过,在我能让这个核心布局发挥作用之前,剩下的一切都只是白日梦。

到目前为止,我已经从 UICollectionViewCell 的子类开始,它有一个标签,对内容 View 的所有 4 个面都有约束。此时我遇到了这些问题:

  1. 不清楚当单元格尚不存在时我如何计算 collectionViewContentSize(),尤其是。考虑到大多数单元格实际上大部分时间都在屏幕外!
  2. 如果我只是输入任意大小的内容(例如 320x1000),我的 View 会显示出来,但它们的高度不会根据标签内容进行调整……我似乎无法从我的 UICollectionViewLayout 子类中读取单元格高度.

见过或做过这样的事吗?我会包含代码,但经过数小时的futzing。我只是在寻找适合这种情况的更清晰的教程或示例代码。

最佳答案

有一个项目您可能想看看。它相当复杂,可能有很多代码用于与您的情况不太匹配的情况,但确实使用 UICollectionView 创建了聊天 View 。

可以在这里找到: https://github.com/jessesquires/JSQMessagesViewController

对于第 1 项 - 关于计算 collectionViewContentSize,我想您会发现您可能不需要计算它,至少只要您为布局使用 UICollectionViewFlowLayout 子类。

对于项目 2 - 与其设置固定的 320x1000,不如查看 JSQMessagesCollectionViewFlowLayout.m 中的 sizeItemAtIndexPath。

抱歉,这可能应该是评论,但我缺乏评论的声誉,所以我把它作为一个答案(这不是倒退吗?嗯。)

关于ios - 使用带有 AutoLayout 的 UICollectionView 实现聊天布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31152764/

相关文章:

ios - Swift - 无法使 : UICollectionElementKindCell with identifier 类型的 View 出队

iphone - 如何在 iOS 中构建这个屏幕?

ios - 如何永久保存数据,直到在 swift 3 中卸载模拟器或 iphone 中的应用程序?

ios - SpriteKit项目中如何检测当前场景

ios - 如何从坐标中获取地址

ios - 删除 Collection View 单元格时应用程序崩溃

ios - 单击 Collection View 单元格时如何获取 TableView 部分

ios - 从另一个不是 View 的类向主场景添加一个 SKSpriteNode

ios - 序列化/反序列化数据并通过 TCP 发送的最佳方式是什么

swift - 如何在 Swift 中从 url 下载视频?