【问题标题】:How to remove space between collection view cell?如何删除集合视图单元格之间的空间?
【发布时间】:2018-06-11 11:16:07
【问题描述】:

我有 3 个单元格,第一个单元格有 label,第二个单元格有 textfield,最后一个单元格有 button,通过使用它给出自动大小,但如何删除单元格之间的空间

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

或者如何在我的场景中使用这个方法

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    code
}

【问题讨论】:

    标签: ios swift uicollectionview flowlayout


    【解决方案1】:

    使用以下集合视图委托函数:

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat { 
        return 0 
    }
    

    对于两边的间距:

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: minimumInteritemSpacingForSectionAtIndex UICollectionViewLayout,  section: Int) -> CGFloat {
      return 0 
    }
    

    Swift 4 和 5

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
        return 0
    }
    
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
        return 0
    }
    
    

    还可以查看documentation

    【讨论】:

      【解决方案2】:

      斯威夫特 5

      func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
          return 0
      }
      
      func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
          return 0
      }
      

      【讨论】:

        【解决方案3】:

        如果您的控制器有一个初始化函数,您可以避免使用 minimumLineSpacingminimumInteritemSpacing 方法将其变大,并执行以下操作:

        init() {
            
            let layout = UICollectionViewFlowLayout()
            layout.minimumLineSpacing = 0
            layout.minimumInteritemSpacing = 0
            
            super.init(collectionViewLayout: layout)
        }
        

        【讨论】:

          【解决方案4】:

          见:https://developer.apple.com/documentation/uikit/uicollectionviewflowlayout

          let layout = collectionView.collectionViewLayout as! UICollectionViewFlowLayout
          layout.minimumInteritemSpacing = 0 // The minimum spacing to use between items in the same row.
          myCollectionView.layout = layout // or myCollectionView.collectionViewLayout ( I don't have compiler here so I do not know the property name, but I know it has property that has layout in its name )
          

          【讨论】:

          • @Salman500 如果项目大小与单元格的内在内容大小相同,我的回答应该有效。确保单元格大小等于内部内容大小
          【解决方案5】:

          Swift 4.0

          UICollectionViewDelegateFlowLayout 有 2 个委托方法来删除项目和部分之间的空间。

          func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
              return 0
          }
          
          func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
              return 0
          }
          

          【讨论】: