【问题标题】:How do I create a 'sticky' horizontal scrolling effect with collection view Swift 3如何使用集合视图 Swift 3 创建“粘性”水平滚动效果
【发布时间】:2018-02-26 07:58:16
【问题描述】:

我有一个包含多个单元格的集合视图。用户可以滚动水平。但是,一旦用户放手,我希望它居中最近的单元格。或者,如果没有,则具有某种形式的分页,但针对单个单元格。我基本上是在制作一个图标/个人资料图片选择器。

@IBOutlet weak var profilePicScrollView: UIScrollView!
var profilePicsArray = [#imageLiteral(resourceName: "sample_user_photo"), #imageLiteral(resourceName: "settings_icon"), #imageLiteral(resourceName: "usernametextfield_dark")]

@IBOutlet weak var profilePicCollectionView: UICollectionView!


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

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

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "ImageViewCellReuseID", for: indexPath) as! SettingsCollectionViewCell

    cell.imageInCollection.image =  profilePicsArray[indexPath.row]
    cell.imageInCollection.backgroundColor = UIColor.getRandomColor()

    return cell
}

【问题讨论】:

    标签: ios swift uicollectionview


    【解决方案1】:

    假设您的集合视图的单元格等于您的集合视图边界的宽度,您可以将集合视图的isPagingEnabled 属性设置为true - 考虑到UICollectionView 继承自UIScrollView

    如果不是这样,那么您可以尝试以下方法:

    首先,实现集合视图委托的scrollViewDidEndDragging(_:willDecelerate:) 方法。然后,在该方法的主体中,通过将 collectionView.visibleCells 中的每个单元格的每个中心与您的集合视图的中心进行比较来确定哪个单元格最明显。找到集合视图中最明显的单元格后,通过调用 scrollToItem(at:at:animated:) 滚动到它。

    【讨论】:

    • 我实际上只是在尝试这个过程!我被困在如何获取父集合视图中每个单元格的相对位置(即自继承以来的滚动视图)。我尝试了 frame、bounds、center.x,似乎没有任何东西返回当前位置...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-16
    • 2017-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多