问题标签 [uicollectionviewflowlayout]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
8 回答
80342 浏览

ios - UICollectionView - 单元格之间的距离?

我正在使用单元格宽度为 67 的 UICollectionView,现在我正在使用流布局。

我连续有 3 个单元格,单元格之间有 30px 的空间。如何使该距离更小,以便我可以连续放置四个单元格?这个方法和它有关系吗?

0 投票
1 回答
3820 浏览

ios - 带有 invalidateSupplementaryElements 和 UICollectionViewLayoutInvalidationContext 的 invalidateLayout

我正在尝试刷新页脚(supplementaryElement)。我正在使用该invalidatelayout方法。基于这里的建议。苹果文档在这里

我收到以下错误:

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“发送到 -[UICollectionViewFlowLayout invalidateLayoutWithContext:] 的失效上下文 () 不是 UICollectionViewFlowLayoutInvalidationContext 类型的实例或子类”

实现代码:

看起来invalidateLayoutmethod 是期待UICollectionViewFlowLayoutInvalidationContext而不是UICollectionViewLayoutInvalidationContext.

我正在使用 Xcode 8 和 Swift 3。

我在 Xcode 中的故事板在这里 -

在此处输入图像描述

“Next”是具有自定义类“ActivitiesSelectMembersFooterView”的页脚

0 投票
0 回答
201 浏览

ios - 具有居中单元格的 UICollectionViewFlowLayout

我正在尝试实现CollectionView与居中单元格的水平对齐,并且我正在使用自定义UICollectionViewFlowLayout. 我找到了几个解决方案,UICollectionViewDelegateFlowLayout但如果您使用自定义的UICollectionViewFlowLayout.

这是我的 UICollectionViewFlowLayout。有什么想法该怎么做?

布局是这样连接的:

在 MyFlowLayout 中调用 Prepare 。

0 投票
2 回答
392 浏览

ios - 以编程方式添加 UICollectionView 时应用程序崩溃

我正在尝试在我的项目中以编程方式添加带有自定义 UICollectionViewCell 的 UICollectionView。

这是我添加 CollectionView 的实现

这个“setUpCollectionView”函数是从我的视图控制器的 ViewDidLoad() 调用的。

我刚刚在 MyChecklistsCell 中实现了这两个功能。

有人可以帮我吗?谢谢。

0 投票
1 回答
1979 浏览

swift - UICollectionViewCell 的动态高度以编程方式与约束?

我从来没有见过一个主题有这么多不同的答案,而不是为集合视图单元格设置动态高度。一些解决方案具有难以想象的代码量,这只会进一步促成UICollectionView集群的共识,因为这可以通过UITableView不做任何事情来实现,因为当约束被正确链接时,动态单元高度是内置的。但我想更好地处理集合视图。这是一场噩梦。

如何在没有一百行代码的情况下在 Swift 中以编程方式(无情节提要)将集合视图单元格的高度设置为动态到其内容大小?

您可以将以下内容插入一个空白项目,如果您愿意,它将运行干净。

集合视图流布局:

集合视图控制器

集合视图单元

0 投票
0 回答
753 浏览

swift - 动态单元格宽度快速问题的 UICollectionViewCell 虚线边框

在 UITableViewCell 下使用 UICollectionView

使用以下扩展创建虚线边框:扩展 UIView {

下面是我调用上述方法的集合视图方法(实际上单元格宽度取决于内容大小,所以我正在计算文本宽度)问题是当单元格从列表中出列时,边框也会从不同宽度重绘我正在使用自定义单元格“CollectionViewCell”类:

滚动视图时第一次正确加载绘图边框时已重绘如何解决此问题 在此处输入图像描述

0 投票
0 回答
535 浏览

swift - 检测 UICollectionView 重新排序结束

我想在锁定前n 个单元格时提供 UICollectionView 重新排序的选项。

为了表示前n 个单元格被“锁定”(无法重新排序),我想将它们的背景颜色更改为浅灰色。

到目前为止,我已经能够通过targetIndexPathForMoveFromItemAt

我遇到的问题是检测用户何时释放重新排序单元格,以便我可以将锁定单元格的背景颜色设置为正常。

我尝试过使用moveItemAt,但是当用户激活重新排序但最终将原始单元格放回其原始索引或重新排序被取消时,它不会被调用。

我尝试过使用didUnhighlightItemAt,但该方法在 之后被调用targetIndexPathForMoveFromItemAt,而不是在用户释放单元格之后。

0 投票
0 回答
535 浏览

ios - 水平 UICollectionView 单行布局的自我调整大小 - 不是单元格

用例:

  • 我有一个UICollectionView要展示的产品,让我们称之为productsViewCollection(只有一行有多个ProductCells)。
  • 每个ProductCell可能有不同的高度,但它们都具有相同的宽度。
  • ProductCell可以在运行时添加。
  • 我正在根据 s 使用自动调整大小的单元AutoLayoutProductCell
  • 我有UICollectionViewFlowLayout自定义类来使产品单元对齐顶部。

    /li>

问题是什么?

  • (1) 我没有找到确定高度的方法productsCollectionView
  • (2) 我没有找到强制productsCollectionView只显示一行的方法。
  • (3)ProductCellproductsCollectionView前导中插入一个新的滚动到第一个项目!,我需要将它保持在相同的位置。

我试过什么?

  • 尝试问题(1):
    • 确定没有高度的宽度是行不通的,因为我需要确定高度,productsCollectionView否则ProductCells 不会出现。
    • 因此我尝试设置高度约束,但应用程序崩溃了"The behavior of the UICollectionViewFlowLayout is not defined because the item height must be less than the height of the UICollectionView minus the section insets top and bottom values, minus the content insets top and bottom values."productsCollectionView没有插图(水平 UICollectionView 单行布局)。
    • 我也尝试使用collectionView.contentSize高度约束来确定高度,productsCollectionView但它不起作用,因为即使您调用layoutIfNeeded或任何类似方法,它也不会具有最终计算的大小(如何使用 FlowLayout和许多其他链接确定 UICollectionView 的高度) .
    • 我也尝试使用collectionView.collectionViewlayout.collectionViewContentSize高度约束来确定高度,productsCollectionView但它不起作用,它会正确计算宽度,而高度将根据AutoLayout约束而不是最大ProductCell高度来确定,所以我没有找到自动确定高度的方法(如何使用 FlowLayout和许多其他链接确定 UICollectionView 的高度)。
    • 因此,最后我尝试根据ProductCells 最大高度手动更改高度,我为 设置了更大的高度约束,productsViewCollection并在MyViewController我调用layoutAttributesForItem了 中的每个项目productsViewCollection来计算每个ProductCell高度。
    • 它起作用了,但是如果我需要插入任何其他产品,我应该做同样的事情,但这也会导致 UI 中的错误行为,productsCollectionView它将扩展几毫秒然后正确裁剪:(。
  • 尝试问题(2):
    • 当然,我将其设置为水平,但这还不够,如果产品高度的总和小于productsCollectionView高度(在 UICollectionView - Swift 中显示一行),流程布局会将产品添加到同一列。
    • 所以我尝试为minimumInteritemSpacing它设置更大的值,但不是 100% 正确,它会在最后添加额外的空间(UICollectionView: One Row 或 Column)。
    • 我试图在方法中使用自定义类使ProductCell高度与高度相同,但它不起作用,高度改变了但同一列的单元格,我不知道为什么!productsCollectionViewUICollectionViewFlowLayoutlayoutAttributesForItem
  • 尝试问题(3):
    • 我不知道为什么插入新项目会导致滚动,有时是第一个项目,有时是几个项目之前,有时它与奇怪的调整大小动画一起正常工作!无论如何,我试图禁用我的调整大小productsCollectionView代码,但什么也没发生。
    • 我试图保存当前productsCollectionView.contentOffset然后应用它,它只有在我将animated参数设置为时才有效true,否则它将是未指定的滚动。

注意: 对不起,我的英语不好,谢谢。

0 投票
0 回答
24 浏览

ios - 朝着更轻的视图控制器,有没有更好的方法来自定义 UICollectionViewFlowLayout?

有没有什么方法可以定制UICollectionViewFlowLayout,没有UICollectionViewDelegateFlowLayout methods

并且可以解析UICollectionViewLayoutAttributessize定的,而不给定的origin

所以我不需要UICollectionViewLayoutAttributes- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect方法中实现 per 的框架。

不计算每个项目的来源会很方便。

这是我的示例代码:

换句话说,使用 的动态调整特性UICollectionViewFlowLayout,而不符合UICollectionViewDelegateFlowLayout协议。

正如 Apple 所说,动态调整功能:

流式布局在一个方向上使用固定距离,在另一个方向上使用可滚动距离来布置其内容。例如,在垂直滚动的网格中,网格内容的宽度被限制为相应集合视图的宽度,而内容的高度会动态调整以匹配网格中的部分和项目的数量。

我觉得很有可能,我现在不知道如何实现。也许是苹果的 API。

非常欢迎任何建议或解释。

提前谢谢了。

0 投票
0 回答
209 浏览

ios - Swift 3:根据最大文本长度调整 MessageBubbleSize

我想在 messageBubble中显示senderName和。timeStamp我进行了很多搜索,并尝试了JSQMessagesViewControllerissues部分和 SO 中提到的各种解决方案。我尝试调整宽度,但它没有反映任何变化,尽管它显示了高度的变化。坦率地说,我不明白如何渲染方法或方法,因为我不知道 Obj-C。sizeForItemAtmessageBubbleSizeForItembubbleSizeCalculator

在这里,messageBubble 会根据消息文本长度调整自身大小,但会剪切senderNametimeStamp文本。我在 上添加了时间戳标签,为和空间UIImageView设置了约束。然后在其上方添加 textView 并设置约束。LeadingTop

cellForItemAt我打电话给cell.messageBubbleImageView.addSubview(cell.timeStamp). 即使文本是 2 个字母,它也应该在每个气泡中显示senderName完整timeStampsenderNametimeStamp并且messageText是动态的,从 XMPP 接收。
请帮我。谢谢你的时间。

在此处输入图像描述