根据 UICollectionView 内容快速移动视图

Posted

技术标签:

【中文标题】根据 UICollectionView 内容快速移动视图【英文标题】:Move a view depending on UICollectionView content offside swift 【发布时间】:2020-02-07 17:59:40 【问题描述】:

您好:我正在尝试创建一个collectionView,页面顶部有一个segmentedControl,它会根据collectionView的当前页面更改它的索引

这是我用来更改选择器的代码:

override func scrollViewDidScroll(_ scrollView: UIScrollView) 
    let offset = scrollView.contentOffset.x
    self.selectorView.frame = CGRect(x: offset/3, y: 0, width: self.view.frame.width/3, height: 2)

但是,这根本不会移动 selectorView,所以我尝试将进程移动到后台线程:

override func scrollViewDidScroll(_ scrollView: UIScrollView) 
    let offset = scrollView.contentOffset.x
    DispatchQueue.main.async 
        self.selectorView.frame = CGRect(x: offset/3, y: 0, width: self.view.frame.width/3, height: 2)
    

这可行,但这是滞后和错误的结果:screen recording on YouTube

有谁知道我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

我会根据页面的当前索引设置 segmentedControl selectedSegmentIndex。这是之前关于如何计算索引的主题:Click

您可以做的另一件事是避免使用集合视图并切换到页面视图控制器,该控制器具有当前页面的指示器,并且能够滚动到不同的部分。一开始配置它们可能会很棘手,但它们值得使用,而且用户非常熟悉这种设计。我知道这可能不是当前问题的确切解决方案,但它会是一种规避问题的方法。

【讨论】:

问题是我需要让彩色视图根据滚动视图移动,因此这不是正常的 UISegmentedControl。 不知道顶部的指示器是什么(因为它不是内置的分段控件)很难知道要建议什么,但根据它是什么,您可以设置一个标记每个元素,然后根据显示的视图切换选定的元素(例如,使用插座集合)。

以上是关于根据 UICollectionView 内容快速移动视图的主要内容,如果未能解决你的问题,请参考以下文章

如何快速在uicollectionview中动态访问单元格属性

根据内容更新 UICollectionView 高度

根据内容居中水平 UICollectionView

如何根据 UITableViewCell 中的内容调整水平 UICollectionView 的高度

UICollectionView Header 根据其内容和边距动态大小

更改 UICollectionView 单元格 X 位置 - 快速