动态调整 collectionViewCell 的常量以在自动布局中使用
Posted
技术标签:
【中文标题】动态调整 collectionViewCell 的常量以在自动布局中使用【英文标题】:Adjust a collectionViewCell's constant dynamically to use in auto layout 【发布时间】:2018-05-17 17:38:53 【问题描述】:我有一个UICollectionView
,它使用UILabel
和低于UIView
呈现单元格。 UIView
使用topAnchor
和10
到UILabel
。
某些单元格的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 的常量以在自动布局中使用的主要内容,如果未能解决你的问题,请参考以下文章
如何在单元格大小更改后自动调整 CollectionViewCell 中的内容大小?
如何在collectionViewCell中使用动态大小的scrollView
使用动态tableView的tableViewCell中的动态collectionViewCell执行Segue With Identifier,swift