【问题标题】:UICollectionView - scroll to the next pageUICollectionView - 滚动到下一页
【发布时间】:2016-01-18 07:26:32
【问题描述】:

是否有机会在 UICollectionView 中使用 . scrollToItemAtIndexPath 并且不捕捉到项目本身,而是捕捉到项目所在的页面? (我启用了分页。)

干杯

【问题讨论】:

  • 项目的页面是什么意思?
  • 每个页面是否有固定数量的收集单元?
  • 是的,项目的页面。我有显示特定月份的页面(这是一个日历)。但是(几乎)每个月都从不同的日子(星期五、星期一等)开始,我想滚动到包含当天的部分(月)。因此,如果我想滚动到(假设现在是 2015 年 12 月 14 日),它会显示如下:imgur.com/TiDWW8X——这就是我想将其捕捉到当前页面/部分的原因

标签: ios swift uicollectionview


【解决方案1】:

您需要创建NSIndexPath 而不是滚动到该索引。

 //Mark: - Move to cell when view did appear

overload viewDidAppear() {


    let scrollIndex: NSIndexPath = NSIndexPath(forItem: dayIndex, inSection: monthSection)
    if (// Check you are in range of UIcollectionView's count) {
        //Scroll collectionview according to your requirement i.e UICollectionViewScrollPositionCenteredHorizontally or UICollectionViewScrollPosition.Left 
        self.YourCollectionView.scrollToItemAtIndexPath(scrollIndex, atScrollPosition: UICollectionViewScrollPositionCenteredHorizontally, animated: true)
    }
}

【讨论】:

  • 我在上面添加了关于该项目的评论
  • 但问题是它不会捕捉到页面。它确实滚动到单元格本身,这很好,但是对于位于页面(部分)中心的单元格,我得到了视图:imgur.com/TiDWW8X。另外,我不知道它是否重要,但我不希望在点击后发生这种情况,我希望它在您加载视图时发生 - 所以我试图在 viewDidAppear 中实现这个 .scrollToItemAtIndexPath
  • 更新 viewDidAppear 的答案。我不明白你关于“不对齐页面”的观点。 iOS 中没有页面。
【解决方案2】:

我确实最终使用了 offsetContent 属性;

我知道每个所谓的页面的宽度。

  1. 我写了一段代码来获取当天的 indexPath
  2. 我检索到了 indexPath 的部分
  3. 我将截面乘以视图的宽度并将其命名为“偏移”
  4. 我将 UICollectionView.contentOffset.x 设置为“offset”,它工作正常。

我也尝试使用 .scrollRectToVisible 和偏移量,效果非常好,但我还想更新基于 UICollectionView 的 contentOffset 的内容,而 .scrollRectToVisible 似乎没有更新此属性 - 它仅更新在我稍微拖动视图之后。

感谢您的帮助!

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-01
  • 2016-01-22
相关资源
最近更新 更多