如何在Swift,XCode中为Collection View设置自定义水平滚动?

时间:2017-11-10 12:07:24

标签: ios swift scroll collectionview

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

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

enter image description here

请帮助!

3 个答案:

答案 0 :(得分:0)

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

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

设置水平方向(从XIB或故事板中选择集合视图)

enter image description here

用于设置分页启用

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)
    }

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

如果使用storyBoard,请转到集合视图并选择右手标签"显示尺寸检查器"并改变

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)
     }
 }