具有两个动态标签和自动布局的UICollectionViewCell动态高度

弗雷德·浮士德

我有一个UICollectionViewCell子类,该子类使用原型单元和约束进行设置(每个视图都垂直和水平连接)。

我有两个大小不一的标签,它们可以是一行或两行。为此,我在每个标签上设置了两个高度限制,一个限制值大于或等于(取决于标签为16或20)而小于或等于(取决于标签为32或40)。

标签上的行数设置为0。(尽管我尝试了各种设置)。

由于使用了自动布局和约束来设置视图,因此我在单元格的awakeFromNib()中的内容视图上指定了宽度

override func awakeFromNib() {
        NSLayoutConstraint.activate([contentView.widthAnchor.constraint(equalToConstant: 341)])
        super.awakeFromNib()
        configureBorder()
}

在collectionView的布局上,我为estimateItemSize和itemSize指定了automaticDimension常量

if let flowLayout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout {
    flowLayout.estimatedItemSize = UICollectionViewFlowLayoutAutomaticSize
    flowLayout.itemSize = UICollectionViewFlowLayoutAutomaticSize
}

关于使用自动布局的想法,我尚未在集合视图上实现委托。

我遇到了非常不一致的布局,在某些情况下该单元格会按照我的意愿出现,在另一些情况下,标签被截断了,在另一些情况下,标签却非常狭窄,并在三行上显示了文本。

我尝试了很多事情,包括 .sizeToFit() 在设置了标签的text属性后调用每个标签,以及 .setNeedsDisplay() 在单元格从其返回之前调用cellForItemAt

我想知道使用情节提要约束执行此操作正确方法是什么。在SO上,我已经针对类似问题解答了一些流行的答案,尽管并没有取得任何真正的成功。

马特
flowLayout.estimatedItemSize = UICollectionViewFlowLayoutAutomaticSize
flowLayout.itemSize = UICollectionViewFlowLayoutAutomaticSize

当然,我熟悉苹果公司一再提出的主张,即UICollectionViewFlowLayout中的UICollectionViewCell可以根据内部约束自动调整大小。但是我从未见过苹果公司提供的可证明该功能的有效代码,而且我从未一次成功地确认这些说法是正确的。我不相信真的有一个自定义大小的单元。多年以来,试图使一个单元自动调整大小会导致崩溃。在iOS 10中,崩溃几乎停止了,但是现在流布局没有正确布置单元格(听起来像您所看到的)。

自然,我年复一年都在提交这些错误。

同时,我要做的是为集合视图提供委托和实现collectionView(_:layout:sizeForItemAt:),建议您也这样做。


编辑iOS 13中的新增功能,您可以使用可组合的布局并完全放弃UICollectionViewFlowLayout。自调整大小的单元在可组合的布局中可以正常工作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

自动布局-当一个视图具有动态高度时,将两个视图在UITableViewCell中垂直居中

iOS 7/8 UITableView单元:两个具有动态高度的UILabel,具有自动布局,用于可变的行高

CSS两个相等的列,具有动态高度

具有动态标签,textview等的XCODE / Swift自动布局ScrollView。如何基于textview设置scrollview的高度

UICollectionViewCell具有2列网格和动态高度

自动布局UIScrollView以及具有动态高度的子视图

具有动态高度图像的自动高度

带有动态高度的uiable上的两个uilabel

使具有动态高度子视图的 UIScrollView 与自动布局一起自动工作

具有动态子视图的自动布局

自动布局动态UITableViewcell高度

如何删除两个具有不同ID和相同类的动态生成的div块

使整个屏幕具有两个动态小部件

具有两个值的 CSS div 动态宽度

如何为具有动态高度的表格单元格正确设置自动布局?

自动布局以动态调整UILabel的高度和宽度

具有自动布局的tableView中标签的高度问题

两个块:一个具有动态宽度,一个具有与动态宽度相同的宽度

为什么在使用动态类型和动态绑定时,两个具有相同名称(属于不同类)的方法应具有相同的原型?

单元格标签中的最后一行不会显示自动布局和动态单元格高度

iOS-具有动态尺寸的多个UILabel和UIImage的自动布局

在滚动视图中具有相同宽度和高度的三个UIButton上的自动布局

iOS:动态高度UIScrollview自动布局

调整两个动态元素的大小以匹配高度

如何使用自动布局创建三个视图,其中一个固定宽度的高度和其他两个固定高度的高度

如何以动态单元格高度和自动布局以编程方式创建一个非常基本的UITableView?

具有自动布局的UIView最小和最大高度

如何使两列布局具有相等的高度列和一个可滚动的列?

具有两个布局的布局水平Android