【问题标题】:Swift - Center Horizontally UICollectionView Cell doesn't workSwift - 水平居中 UICollectionView 单元格不起作用
【发布时间】:2020-01-02 13:41:52
【问题描述】:

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

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, layout collectionViewLayout: UICollectionViewLayout, 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: 45)
            } else {
                return CGSize(width: width + 15, 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,并且没有在代码中完成所有操作,如果您能帮我解决这个问题,我将不胜感激。

【问题讨论】:

  • 您是否在您的 xib 中应用了任何约束?
  • @AqeelAhmad 是的,我为安全区域的所有视图应用了锚
  • totalSpacing 变量的值是多少?
  • @AqeelAhmad 取决于每行的项目,间距变量等于 16
  • 我认为你在计算宽度时做错了。尝试应用硬编码值而不是计算。通过这样做,您将能够知道您正在做错误的计算或问题是其他问题。

标签: swift uicollectionview uicollectionviewcell collectionview


【解决方案1】:

我找到了答案,但我仍然不知道它在其他 ViewController 而不是这个 ViewController 中有什么问题,这个 ViewController 和其他 ViewController 之间的唯一区别是在这个 ViewController 中我使用了超过 1 个 ViewController。我在下面链接了答案,所以如果有人有这个问题可以解决它,我使用了第二种解决方案并且它有效。感谢 Cœur 分享此内容。

Answer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-08
    • 1970-01-01
    • 2015-04-07
    • 1970-01-01
    • 2014-10-16
    • 1970-01-01
    • 2020-02-02
    相关资源
    最近更新 更多