动态调整 collectionViewCell 的常量以在自动布局中使用

Posted

技术标签:

【中文标题】动态调整 collectionViewCell 的常量以在自动布局中使用【英文标题】:Adjust a collectionViewCell's constant dynamically to use in auto layout 【发布时间】:2018-05-17 17:38:53 【问题描述】:

我有一个UICollectionView,它使用UILabel 和低于UIView 呈现单元格。 UIView 使用topAnchor10UILabel

某些单元格的UILabel 值为零。在这种情况下,我希望topAnchor 中使用的常量为0

我可以设置每个单元格的常数(在单元格中使用didSet 观察者)。布局但是我无法更新。 view.layoutIfNeeded() 没有这样做。下面是代码。我很感激任何指示。谢谢!!

这是在单元格类中:

var photoMarginToTop = CGFloat()

var post: Post? 
    if post?.title != nil 
        titleLabel.text = post?.title
        photoMarginToTop = 10
        updateLayout()
    

    if post?.title == nil 
        photoMarginToTop = 0
        updateLayout()
    


func updateLayout() 
    photoView.topAnchor.constraint(equalTo: titleLabel.bottomAnchor, constant: photoMarginToTop).isActive = true
    photoView.layoutIfNeeded()

【问题讨论】:

如果标签为 nil,那么 0 常量是不够的,因为它仍然锚定在标签上,而标签可能不存在。无论如何,出于性能考虑,如果没有必要,我不会将一堆属性观察器添加到可重用单元的集合中,因为它可能会变得混乱和故障。只需制作两个单元格,一个带标签,一个不带标签,然后在数据源中将必要的单元格出列。 【参考方案1】:

layoutIfNeeded() 函数布局视图的子视图,而不是您传递此函数的视图。因此,直接更新单元格布局。

【讨论】:

【参考方案2】:

您似乎正在尝试为单元格创建动态高度?

我建议你继承UICollectionViewFlowLayout 并关注this tutorial by Ray Wenderlich。它们采用随机图像高度并相应地调整单元格大小。

【讨论】:

以上是关于动态调整 collectionViewCell 的常量以在自动布局中使用的主要内容,如果未能解决你的问题,请参考以下文章

动态大小 CollectionViewCells

如何在单元格大小更改后自动调整 CollectionViewCell 中的内容大小?

如何在collectionViewCell中使用动态大小的scrollView

使用动态tableView的tableViewCell中的动态collectionViewCell执行Segue With Identifier,swift

CollectionViewCell对齐XCode 7.2

自动布局为每个 collectionViewCell 计算相同的高度