Swift-水平居中UICollectionView单元不起作用

这是ViewController中CollectionView的代码,但是它不会使Cells处于CollectionView的中心,结果如下:

Swift-水平居中UICollectionView单元不起作用

extension DeviceAndEquipmentViewController : UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout {

func numberOfSections(in collectionView: UICollectionView) -> Int {
    return 1
}

func collectionView(_ collectionView: UICollectionView,numberOfItemsInSection section: Int) -> Int {

    if collectionView === deviceCollectionView {
        guard selectedDeviceList.count != 0 else {
            selectedDeviceList.insert("nil",at: 0)
            return 1
        }
        return selectedDeviceList.count
    } else if collectionView === equipmentCollectionView {
        guard selectedEquipmentList.count != 0 else {
            selectedEquipmentList.insert("nil",at: 0)
            return 1
        }
        return selectedEquipmentList.count
    } else if collectionView === softwareCollectionView {
        guard selectedSoftwareList.count != 0 else {
            selectedSoftwareList.insert("nil",at: 0)
            return 1
        }
        return selectedSoftwareList.count
    } else {
        return 0
    }

}


func collectionView(_ collectionView: UICollectionView,layout collectionViewLayout: UICollectionViewLayout,insetforSectionAt section: Int) -> UIEdgeInsets {

    let inset:CGFloat = 10
    return UIEdgeInsets(top: inset,left: inset,bottom: inset,right: inset)

}

func collectionView(_ collectionView: UICollectionView,sizeForItemAt indexPath: IndexPath) -> CGSize {

                let numberOfItemsPerRow:CGFloat = 1
                 let spacingBetweenCells:CGFloat = 16

                let totalSpacing = (2 * self.spacing) + ((numberOfItemsPerRow - 1) * spacingBetweenCells)

                let width = (deviceCollectionView.bounds.width - totalSpacing) / numberOfItemsPerRow

    if collectionView == deviceCollectionView {

            let device = self.selectedDeviceList[indexPath.row]

            if device != "nil" {
                    return CGSize(width: width,height: 45)
            } else {
                    return CGSize(width: width + 15,height: 55)
        }
    } else if collectionView == equipmentCollectionView {

            let equipment = self.selectedEquipmentList[indexPath.row]
            if equipment != "nil" {
                return CGSize(width: width,height: 45)
            } else {
                return CGSize(width: width + 15,height: 55)
        }
    } else {

        let software = self.selectedSoftwareList[indexPath.row]

            if software != "nil" {
                return CGSize(width: width,height: 55)
        }
    }


}
}

这是每个CollectionView FlowLayout的设置

let layout = UICollectionViewFlowLayout()
    layout.sectionInset = UIEdgeInsets(top: spacing,left: spacing,bottom: spacing,right: spacing)
    layout.minimumLinespacing = spacing
    layout.minimumInteritemSpacing = spacing
    self.equipmentCollectionView?.collectionViewLayout = layout

我看过其他主题,但是并没有解决我的问题,我对每个集合视图单元格使用XIB,并且没有在Code中完成全部操作,如果您能帮助我解决问题,我将不胜感激。

wxyyjzj 回答:Swift-水平居中UICollectionView单元不起作用

我找到了答案,但是我仍然不知道它在其他ViewController中工作有什么问题,但在这个ViewController中却没有,在这个ViewController和其他ViewController之间的唯一区别是在这个我使用了不止一个ViewController。我在下面链接了答案,因此,如果任何人都可以解决此问题,则可以使用第二种解决方案,它可以正常工作。感谢Cœur分享了这一点。

Answer

本文链接:https://www.f2er.com/2830166.html

大家都在问