如何以动态宽度水平居中collectionView项目?

Posted

技术标签:

【中文标题】如何以动态宽度水平居中collectionView项目?【英文标题】:How to horizontally center collectionView items with dynamic width? 【发布时间】:2018-10-22 23:33:55 【问题描述】:

您好,我环顾四周,还没有找到解决问题的方法。我正在尝试将 collectionView 的项目水平居中,其中项目的宽度和大小都不同。因此,该部分中的某些行可能有 2 个项目,有些可能只有 1 个。我见过的大多数解决方案都设置了 UIEdgeInsets 但由于我不知道该行是否包含多少项目,除了不知道项目大小,我一直很难让它工作。

我附上了一张图片,向您展示我目前拥有的东西。任何建议将不胜感激

【问题讨论】:

仅供参考,我最终使用了KTCenterLayout 重复,从[***.com/a/68734263/10505343]找到答案 【参考方案1】:

选择正确的 UI Widget,以最小的努力实现您想要的。根据您的截图,UITableView 应该是实现这一目标的正确选择。

这里有一些提示

    使用自定义UITableViewCell,标签在UITableViewCell内水平和垂直居中

    使用动态大小,这样如果文本变大,单元格也会变大。

    去掉单元格的分隔符和背景色,单元格的contentView。

愉快的编码

【讨论】:

A TableView 没有达到我想要的效果,因为它每“行”只显示 1 个标签,我想在标签宽度允许的范围内显示尽可能多的标签。跨度> 【参考方案2】:

您可以使用GitHubriteshhgupta编写的开源项目TagCellLayout。

初始化布局的示例代码:

import TagCellLayout

let tagCellLayout = TagCellLayout(alignment: .center, delegate: self)
collectionView.collectionViewLayout = tagCellLayout

我知道您可能会为此编写大量代码,但这会很有帮助,甚至您可以自定义不同的布局对齐方式。

【讨论】:

谢谢,我去看看

以上是关于如何以动态宽度水平居中collectionView项目?的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式为水平居中的元素提供偏移量

调整文本大小以适应宽度(1行标签)后,如何在 UILabel 中垂直和水平居中?

如何将零宽度元素的文本水平居中?

宽度大于其包装(设置为溢出:隐藏)的子图像可以动态水平居中吗?

尝试使用 outerWidth() 和 $(window).resize() 水平居中动态宽度元素时的意外行为

如何在水平collectionview中设置不同的单元格高度和宽度