UICollectionView 单元格在swift中使用约束固定宽度和动态高度
Posted
技术标签:
【中文标题】UICollectionView 单元格在swift中使用约束固定宽度和动态高度【英文标题】:UICollectionView cell fixed width and dynamic height using constraints in swift 【发布时间】:2019-09-12 05:32:20 【问题描述】:我有一个集合视图和一个单元格,里面有一个基于其内容具有固定宽度和动态高度的单元格。我正在使用自动布局约束,我的代码如下。
我已经尝试在单元格内和视图内设置所有类型的自动约束。
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
return 5
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) as! ViewControllerCell
cell.lbl_text.text = "djs sdfs sdfs dsfsfd gdgfd dfgd df "
return cell
override func viewDidLoad()
super.viewDidLoad()
// Do any additional setup after loading the view.
if let flowLayout = coll_main?.collectionViewLayout as? UICollectionViewFlowLayout
flowLayout.estimatedItemSize = UICollectionViewFlowLayout.automaticSize
In cell class method:
override func awakeFromNib()
super.awakeFromNib()
self.contentView.autoresizingMask = [UIView.AutoresizingMask.flexibleHeight]
override func layoutSubviews()
self.layoutIfNeeded()
我在没有设置该宽度的情况下获得单元格宽度修复。这个问题怎么解决?
这里是截图。
【问题讨论】:
您必须实现sizeForItemAt
才能提供正确的大小。
【参考方案1】:
您需要确保 CollectionView 的 Estimate Size
设置为 None
。
【讨论】:
【参考方案2】:请执行以下步骤
-
在界面构建器中选择您的 collectionView。
去找尺寸检查员
将估计大小更改为无,如图所示。
希望它能解决问题
【讨论】:
【参考方案3】:您可以使用 collectionView 委托
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize
return CGSize(width:, height:)
为此,您需要扩展 UICollectionViewDelegateFlowLayout
【讨论】:
【参考方案4】:您必须使用UICollectionViewDelegateFlowLayout
并实现sizeForItemAt
,如下所示。
// MARK: - UICollectionViewDelegateFlowLayout -
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize
let sectionInset = (collectionViewLayout as! UICollectionViewFlowLayout).sectionInset
// Here you can set dynamic height for the individual cell according to your content size.
let referenceHeight: CGFloat = 100 // Approximate height of your cell
let referenceWidth = collectionView.safeAreaLayoutGuide.layoutFrame.width
- sectionInset.left
- sectionInset.right
- collectionView.contentInset.left
- collectionView.contentInset.right
return CGSize(width: referenceWidth, height: referenceHeight)
这里有一篇关于它的文章,你可以关注this。
【讨论】:
【参考方案5】:在您的集合视图中添加此属性或取消选中您笔尖中的 PrefetchingEnabled 属性。
collectionView.isPrefetchingEnabled = false
【讨论】:
【参考方案6】:实现 UICollectionViewDelegateFlowLayout 方法以获取集合单元格大小。
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize
然后转到情节提要并在尺寸检查器中将collectionView 估计尺寸设为无
【讨论】:
以上是关于UICollectionView 单元格在swift中使用约束固定宽度和动态高度的主要内容,如果未能解决你的问题,请参考以下文章
UICollectionView 隐藏/防止单元格在 Sticky Header 后面滚动
UICollectionView 的单元格在滚动后并不总是刷新
UICollectionView 中的大单元格在仍显示的情况下被删除
为啥我的 UICollectionView 单元格在我的 swift ios 应用程序中不可点击?