2015-11-24 46 views
0

我有一个嵌套在UINavigationController中的UICollectionViewController的子类。该集合包含多个单元格(当前为3个),每个单元格与全屏大小相同。UICollectionView在初始化后不滚动

当显示整个事情,收集视图initally滚动到特定的小区(其工作完美无缺用于每个小区):

override func viewDidLayoutSubviews() { 
    super.viewDidLayoutSubviews() 
    if let path = currentlyPresentedPhotoCellIndexPath { // this is set in the beginning 
     collectionView?.scrollToItemAtIndexPath(path, atScrollPosition: UICollectionViewScrollPosition.CenteredHorizontally, animated: false) 
    } 
} 

然而,集合视图拒绝水平滚动,在下文中,就好像用户交互被禁用一样。我不知道发生了什么,但是这是我迄今检查:

  • 用户交互的集合视图
  • 下一个单元格(向左或向右,取决于滚动方向)启用了要求正确地,我发现通过检查collectionView:cellForItemAtIndexPath:
  • 请求的ImagePath是一个
  • scrollToItemAtIndexPath...无法正常工作或如果我尝试触发滚动一切都已经加载之后编程(没有任何反应)右
  • scrollRectToVisible...既不
  • 纲领性滚动尝试之前设置collectionView?.contentInset = UIEdgeInsetsZero发生不会改变任何东西
  • 集合视图的内容大小为3072x768(= 3的屏幕,即3个细胞)

哪些要点是缺少,在这里?

+1

你试过吗? http://stackoverflow.com/questions/33737839/change-scrolling-position-of-collection-view-when-view-is-currently-not-visible/33738415#33738415 –

+0

那么,滚动发生在代码之后我发布成功执行。所以,一切都已经摆平了。此外,自动滚动(基于用户手势,即不通过编程触发)应该在任何情况下发生。 – Bastian

+0

@ Mr.T我修改我的评论:不是我的问题的解决方案,但绝对是一个指向正确方向的指针! – Bastian

回答

1

虽然这篇文章并没有精确地解决我的问题的根源,但却迫使我思考我发布的代码。如果你看它,你会看到它基本上说:每当需要布置视图时,滚动到位置处的单元格当前提供的照片细胞索引路径。但是,如果没有任何上下文,这个变量只能在整个控制器初始化时设置一次。因此,当您尝试滚动时,布局会发生变化,然后控制器会跳回到初始单元格,看起来没有任何反应。

要改变这种情况,您只需执行一次滚动,例如,通过这样做:

override func viewDidLayoutSubviews() { 
    super.viewDidLayoutSubviews() 
    if let path = currentlyPresentedPhotoCellIndexPath { // only once possible 
     collectionView?.scrollToItemAtIndexPath(path, atScrollPosition: UICollectionViewScrollPosition.CenteredHorizontally, animated: false) 
     currentlyPresentedPhotoCellIndexPath = nil // because of this line 
     // "initiallyPresentedPhotoCellIndexPath" would probably a better name 
    } 
} 

非常感谢Mr.T!