UICollectionViewCell 有 2 个单元格,每个单元格都有“wrap_content”高度

Posted

技术标签:

【中文标题】UICollectionViewCell 有 2 个单元格,每个单元格都有“wrap_content”高度【英文标题】:UICollectionViewCell with 2 cells, every single cell with "wrap_content" height 【发布时间】:2018-09-28 20:09:49 【问题描述】:

我正在尝试在 CollectionView 上设置自动高度单元格。

我有 2 个不同的单元格,可以。

当我旋转设备landscape 时,我会更改为自动高度和宽度。有用。但是当回到portrait 时,它不会:

func checkEstimatedSize()
    if(DeviceType.IS_IPAD || UIDevice.current.orientation == .landscapeLeft || UIDevice.current.orientation == .landscapeRight)
        if let layout = myCollectionView.collectionViewLayout as? UICollectionViewFlowLayout 
            layout.estimatedItemSize = CGSize(width: 1, height: 1)
            layout.invalidateLayout()
        
    else
        if(UIDevice.current.orientation == .portrait || UIDevice.current.orientation == .portraitUpsideDown)
            if let layout = myCollectionView.collectionViewLayout as? UICollectionViewFlowLayout 
                //get width of CollectionView
                layout.estimatedItemSize = CGSize(width: 0, height: 1)
                layout.invalidateLayout()
            
        
    

纵向时,我希望宽度与 CollectionView 相同,但高度取决于单元格的内容。

我知道有一个sizeForItemAt indexPath,但是如何检查/设置单元格(或 CollectionView)的“autoheight”。

对不起,我不是专家,所以我问专家...

提前谢谢你。

编辑:

原来我在第二个 else 上更改了 layout.estimatedItemSize = CGSize(width: myCollectionView.frame.width, height: 0) 并且有点工作...... 但现在我收到警告加上模拟器冻结: The behavior of the UICollectionViewFlowLayout is not defined because: MyApp the item width must be less than the width of the UICollectionView minus the section insets left and right values, minus the content insets left and right values.

想法?

【问题讨论】:

【参考方案1】:

我需要将 UICollectionViewFlowLayoutAutomaticSize 设置为我的 else:

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator)
    checkEstimatedSize()


func checkEstimatedSize()
    if(DeviceType.IS_IPAD || UIDevice.current.orientation == .landscapeLeft || UIDevice.current.orientation == .landscapeRight)
        if let layout = myCollectionView.collectionViewLayout as? UICollectionViewFlowLayout 
            layout.estimatedItemSize = CGSize(width: 1, height: 1)
            layout.invalidateLayout()
        
    else
        if let layout = myCollectionView.collectionViewLayout as? UICollectionViewFlowLayout 
            layout.estimatedItemSize = UICollectionViewFlowLayoutAutomaticSize
            layout.invalidateLayout()
        
    

这样就完美了!

谢谢大家!

【讨论】:

以上是关于UICollectionViewCell 有 2 个单元格,每个单元格都有“wrap_content”高度的主要内容,如果未能解决你的问题,请参考以下文章

如何为 UICollectionViewCell 的帧更改设置动画

动态调整 UICollectionViewCell 的大小

UICollectionViewCell - 将不同的 CAGradientLayer 应用于不同的 UIView

Expandable UICollectionViewCell 重新定位问题

UICollectionviewCell 总是放置在视图的边缘

如何更改 UICollectionViewCell 内的 UILabel 的值?