我知道以前有人问过这个问题,但他们都在UITableViewsUIScrollViews岁左右,我找不到适合我的被接受的解决方案.我想要的是水平滚动我的UICollectionView时的捕捉效果-很像iOS AppStore中发生的事情.iOS9+是我的目标版本,所以在回答这个问题之前,请先看看UIKit的变化.

谢谢.

推荐答案

虽然我最初使用的是Objective-C,但后来我改用了Swift,最初接受的答案并不够用.

我最终创建了一个UICollectionViewLayout子类,它提供了最好的(imo)体验,而不是当用户停止滚动时改变内容偏移量或类似内容的其他功能.

class SnappingCollectionViewLayout: UICollectionViewFlowLayout {

    override func targetContentOffset(forProposedContentOffset proposedContentOffset: CGPoint, withScrollingVelocity velocity: CGPoint) -> CGPoint {
        guard let collectionView = collectionView else { return super.targetContentOffset(forProposedContentOffset: proposedContentOffset, withScrollingVelocity: velocity) }

        var offsetAdjustment = CGFloat.greatestFiniteMagnitude
        let horizontalOffset = proposedContentOffset.x + collectionView.contentInset.left

        let targetRect = CGRect(x: proposedContentOffset.x, y: 0, width: collectionView.bounds.size.width, height: collectionView.bounds.size.height)

        let layoutAttributesArray = super.layoutAttributesForElements(in: targetRect)

        layoutAttributesArray?.forEach({ (layoutAttributes) in
            let itemOffset = layoutAttributes.frame.origin.x
            if fabsf(Float(itemOffset - horizontalOffset)) < fabsf(Float(offsetAdjustment)) {
                offsetAdjustment = itemOffset - horizontalOffset
            }
        })

        return CGPoint(x: proposedContentOffset.x + offsetAdjustment, y: proposedContentOffset.y)
    }
}

对于当前布局子类,要获得最自然的减速效果,请确保设置以下各项:

collectionView?.decelerationRate = UIScrollViewDecelerationRateFast

Ios相关问答推荐

第三方框架的iOS隐私声明

SwiftUI中ForEach和@ State数组的可能并发问题

如何在SwiftUI ScrollView中zoom 中心项目?

在带有可编码的SWIFT5中,可以轻松处理以美元符号开头的JSON密钥,例如$DATE";

在SwiftUI中动态隐藏列表的空部分

使用AVCaptureEventInteraction捕获音量按键快门

如何创建具有SPM依赖项的二进制XCFramework?

SWIFT AVFoundation不能在查看更新的同时发布更新

快速相机放大手势不能正常工作

SWIFT-仅解码感兴趣的元素

iOS Swift 应用程序实例的存活时间

swiftui 图像放大时无法正确拖动

iOS上从谷歌云存储API不断收到网络连接已丢失的错误信息

更改图标会导致 SwiftUI 动画出现故障?

UICollectionView - 水平滚动,水平布局?

在 iOS 编程中使用 Storyboard 代替 xib 文件有什么好处?

使用未知类型创建图像格式是一个错误与 UIImagePickerController

在 React Native 中保存敏感数据

iOS:设备旋转后如何运行函数(Swift)

如何进行键值观察并在 UIView 的框架上获取 KVO 回调?