如何在 Swift、XCode 中为 Collection 视图设置自定义水平滚动?

How can I set custom horizontal scroll for Collection View in Swift, XCode?

我想为我的 CollectionView 设置自定义水平滚动,它将滚动 1 个单元格(而不是屏幕的整个宽度)。

我可以设置水平滚动,但不能自定义。 (见屏幕)。 1 屏幕:我对 UIScrollViewDelegate 的 collectionView 的扩展。 *我看到,在控制台中(也可以看到)"x" - 我的偏移量 = 290 - 这是真的!但实际上它不是290。分页标记在"true" 2 screen: delegate and dataSource.

请帮忙!

首先您需要将 collectionView 滚动方向设置为水平 (UICollectionViewScrollDirectionHorizontal) 并将 pagingEnabled 设置为 YES

这意味着您的 collection 视图将逐个单元格水平滚动。

设置水平方向(Select collection 从 XIB 或 Storyboard 查看)

并为设置分页启用

myCollectionView.pagingEnabled = true

更新:

你应该使用 UICollectionViewDelegateFlowLayout 委托

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize
    {
        let width = UIScreen.main.bounds.size.width
        var height = 101.7 // set height as you want
        return CGSize(width: width, height: height)
    }

您可以创建一个自定义 UICollectionViewFlowLayout,它将单元格置于屏幕中央,然后一次一页。 Karmadust 写了一个很好的博客 post 我过去曾成功地用它来做同样的事情

http://blog.karmadust.com/centered-paging-with-preview-cells-on-uicollectionview/

如果使用故事板,请转到 collection 视图并 select 右手选项卡 "show the size inspector" 并更改

minimum spacing for cells = 0
minimum spacing for lines = 0

如果您想直接从代码进行更改,请实施这些 UICollectionViewDelegateFlowLayout 方法

 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
}

必须记住滚动方向设置为水平 并启用分页

并将此委托方法实现到代码中

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