【发布时间】:2020-09-10 17:28:14
【问题描述】:
TLDR; 根据部分,我需要调整单元格的大小:
- 固定宽度但动态高度(例如,全屏宽度和自动高度取决于内容)
- 动态宽度但固定高度(第一个单元格可以是 120pt 宽,第二个单元格可以是 155pt 宽,等等。)
我只是在寻找:“是的,您可以通过组合布局来实现这一点,这就是如何......”。或者“不,你不能用组合来实现这个,你必须使用流布局或其他一些自定义布局。”
几个附加要求:
- 建议的解决方案不建议将collectionView(_:layout:sizeForItemAt:) 与流布局一起使用,因为这是我们试图避免的事情。如果这就是答案,那么您可以简单地说 - “不,这无法通过组合布局实现”。
- 建议的解决方案应该让集合视图根据单元格的固有内容大小确定如何正确放置单元格。这类似于
UITableViewAutomaticDimension使用 tableview 的动态自调整大小功能
背景信息:
- 很清楚如何使用组合布局实现全宽但动态高度的单元格。见this exchange。
- 在here 和here 中记录了具有自动内容大小的流布局的已知限制。那是写了O'Reilly books 之一的人。基本上他说没有真正的自动调整流布局,尽管苹果声称有。因此,我们试图通过组合布局来解决这个问题。
【问题讨论】:
-
您需要在配置单元之前确定单元大小。因此,当您获取单元格的数据之后......但在加载 collectionview 之前......添加一些函数来确定它应该具有的单元格大小(将此数据存储在数组中)。在 UICollectionViewFlowLayoutDelegate 的 sizeForItem 函数中,您可以包含基于 indexpath 引用节和单元格大小的逻辑。
-
感谢您提供的信息 - 我意识到我的问题并不清楚。我们对使用 FlowLayout 和 collectionView(_:layout:sizeForItemAt:) 委托方法的特定路径不感兴趣。感谢您抽出宝贵时间回复。
-
别担心!祝你好运,试图通过组合布局来解决这个问题。我认为这是新的,不确定它的可定制性如何。如果您另有决定,我相信您可以使用 sizeForItemAt 轻松完成您想要完成的任务。我一直根据动态内容设置具有不同大小单元格的 collectionViews。干杯
标签: ios swift dynamic uicollectionview uicollectionviewcompositionallayout