【问题标题】:Centering cells for paging UICollectionView用于分页 UICollectionView 的居中单元格
【发布时间】:2017-04-11 05:45:12
【问题描述】:

我有这样的 UICollectionView 设置:

viewDidLoad:

func setupCollectionView() {
  collectionView.delegate = self
  collectionView.dataSource = self
  collectionView.register(UINib(nibName: "NewQuizzesCollectionViewCell", bundle: nil), forCellWithReuseIdentifier: "NewQuizzesCollectionViewCell")

  let flowLayout = UICollectionViewFlowLayout()
  flowLayout.scrollDirection = .horizontal
  flowLayout.minimumInteritemSpacing = 20
  flowLayout.minimumLineSpacing = 20
  collectionView.isPagingEnabled = true
  collectionView.setCollectionViewLayout(flowLayout, animated: false)
}

还有我的代表:

extension NewQuizzesViewController: UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout {

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

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

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell: NewQuizzesCollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "NewQuizzesCollectionViewCell", for: indexPath) as! NewQuizzesCollectionViewCell
        cell.backgroundColor = colors[indexPath.row]
        return cell
    }

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

}

当我运行应用程序时,它看起来像这样:

我的问题是,如何使单元格居中?我注意到我可以调整单元格之间的间距,但是如何在红色单元格的左侧添加间距?对此的任何指示将不胜感激。谢谢!

【问题讨论】:

    标签: ios swift uicollectionview


    【解决方案1】:

    试试这个委托函数会有所帮助,你需要根据需要设置单元格的宽度

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

    希望对你有帮助

    【讨论】:

      【解决方案2】:

      你试试那个可能对你有帮助的代码..

       override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
      
          let offSet = self.collectionView.contentOffset
          let width = self.collectionView.bounds.size.width
      
          let index = round(offSet.x / width)
          let newPoint = CGPoint(x: index * size.width, y: offSet.y)
      
      
          coordinator.animate(alongsideTransition: { (UIViewControllerTransitionCoordinatorContext) in
      
          },completion: {(UIVIewTransitionCoordinatorContext) in
              self.collectionView.reloadData()
              self.collectionView.setContentOffset(newPoint, animated: true)
          })
      
      }
      
      
       func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
          return CGSize(width: collectionView.frame.size.width, height: collectionView.frame.size.height)
      }
      

      【讨论】:

        【解决方案3】:

        对于 swift 3.0

        minimumLineSpacingForSectionAt 函数用于设置 UICollectionView 布局单元格之间的间距..

        并且您需要添加 UICollectionViewDelegateFlowLayout 的子类,以便您可以像这样使用 minimumLineSpacingForSectionAt 函数

        class HomeBestSallingCatgCell: DatasourceCell ,UICollectionViewDelegate,UICollectionViewDataSource, UICollectionViewDelegateFlowLayout {
           .......
           ......
        
            func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
              return 0 //set return 0 for no spacing you can check to change the return value
            }
         }
        

        希望对你有用

        【讨论】:

          猜你喜欢
          • 2021-07-10
          • 1970-01-01
          • 1970-01-01
          • 2012-12-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多