Swift 2 集合视图扩展,用于水平滚动到垂直

Posted

技术标签:

【中文标题】Swift 2 集合视图扩展,用于水平滚动到垂直【英文标题】:Swift 2 collection view extension for horizontal scroll to vertical 【发布时间】:2016-08-11 08:22:01 【问题描述】:

我的收藏视图有这个扩展,它可以进行水平滚动,但我想在垂直滚动时更改它??

extension viewRe : UIScrollViewDelegate

    func scrollViewWillEndDragging(scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>)
    
        let layout = self.recipesCollView?.collectionViewLayout as! UICollectionViewFlowLayout
        let cellWidthIncludingSpacing = layout.itemSize.width + layout.minimumLineSpacing

        var offset = targetContentOffset.memory
        let index = (offset.x + scrollView.contentInset.left) / cellWidthIncludingSpacing
        let roundedIndex = round(index)

        offset = CGPoint(x: roundedIndex * cellWidthIncludingSpacing - scrollView.contentInset.left, y: -scrollView.contentInset.top)
        targetContentOffset.memory = offset
    

有了这个扩展,我试图让单元格保持在视图的顶部,即使他滚动,因为启用了分页。因此,每当用户滚动时,我希望单元格在用户滚动时粘在顶部等等。

【问题讨论】:

你试过设置集合视图的滚动方向吗?不知道你为什么要实际实施扩展。 @donnywals 是的,启用了滚动和分页 但是你设置滚动方向了吗?由于您尝试从水平滚动转换为垂直滚动,您可能希望将 scrollDirection 设置为 .Vertical 您更新了问题,但我不确定您现在在问什么。您希望将集合视图的滚动方向从水平转换为垂直,并且您的扩展应该使单元格粘住到顶部?你试过什么了?如果你让它水平工作不会垂直意味着你应该将 x 和 left 部分更改为 y 和 top? @donnywals 是的,我已经尝试过了,但还是不行 【参考方案1】:

@donnyWals 是对的。如果您使用的是UICollectionView,只需更改其UICollectionViewFlowLayout

let layout = UICollectionViewFlowLayout()
layout.scrollDirection = . Horizontal
let collectionView = UICollectionView(frame: frame, collectionViewLayout: layout)

或者如果你有一个现有的UICollectionView

if let layout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout 
    layout.scrollDirection = .Horizontal

遵循官方 API:

UICollectionView

UICollectionViewFlowLayout

【讨论】:

我更新了我的问题,因为我第一次不清楚。对不起。

以上是关于Swift 2 集合视图扩展,用于水平滚动到垂直的主要内容,如果未能解决你的问题,请参考以下文章

当我将滚动方向从垂直更改为水平时,为啥集合视图会崩溃?

Swift 中一个垂直 ScrollView 中的多个水平 ScrollView?

嵌套集合视图 Swift 4.2

垂直放置集合视图单元格而不是水平放置?

彼此内部的多个滚动视图

UIScrollView 不使用 UICollectionView 滚动