【问题标题】:Collection View layout bug when selectItem (Swift 5)selectItem 时的集合视图布局错误(Swift 5)
【发布时间】:2020-05-11 15:18:09
【问题描述】:

从 viewDidLoad 中选择单元格后布局发生变化

选择单元格之前

选择单元格后

let indexPath = IndexPath(row: SelectedFolderIndex, section: 0)       
collectionView.selectItem(at: indexPath, animated: false, scrollPosition: .centeredVertically)

布局

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    return CGSize(width: collectionView.frame.width/2.2, height: 55)
}

ViewDidLoad

let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
layout.sectionInset = UIEdgeInsets(top: 7, left: 12, bottom: 12, right: 12)
layout.minimumInteritemSpacing = 5
layout.minimumLineSpacing = 11
collectionView!.collectionViewLayout = layout
collectionView.delegate = self
collectionView.dataSource = self
collectionView.allowsMultipleSelection = false

【问题讨论】:

  • 实现最小间距法
  • @SPatel 他已经添加 layout.minimumInteritemSpacing = 5; layout.minimumLineSpacing = 11
  • 试试layout.sectionInset = UIEdgeInsets.zero layout.minimumInteritemSpacing = 0
  • @SPatel 可以,但是现在如何为单元格添加填充?

标签: swift layout uicollectionview swift5 swift5.2


【解决方案1】:

您需要从单元格宽度中剪切插图和间距:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    let width = (collectionView.frame.width/2.2) - 2*12 - 11
    return CGSize(width: width, height: 55)
}

【讨论】:

    【解决方案2】:

    当您设置scrollPosition: .centeredVertically 时,您将设置滚动后的项目将位于中心并垂直对齐,就像您在案例中看到的那样。尝试查看 https://developer.apple.com/documentation/uikit/uicollectionview/1618057-selectitem 以更改您想要的行为

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多