UICollectionView从右向左滚动(反向)

时间:2012-12-19 18:15:11

标签: ios uiscrollview uistoryboard uicollectionview

我希望有一个从右向左滚动的UICollectionView,即在加载后它出现在屏幕上时,收集视图应首先显示最右边的单元格/项目,然后在左侧添加其余的单元格/项目。我已经尝试了here提供的解决方法,但是如果我在viewWillAppear:中调用此方法,我会得到:

*** Assertion failure in -[UICollectionViewData layoutAttributesForItemAtIndexPath:], /SourceCache/UIKit/UIKit-2372/UICollectionViewData.m:485

如果我滚动到viewDidAppear:中的最后一项,它可以正常工作,除非用户先看到左边的项目,然后滚动到最后一项。还尝试在UICollectionView上使用contentOffset属性(因为它是UIScrollView的子类),但此参数也仅在viewWillAppear:viewDidAppear:之间的某个时间设置

任何替代方案?我想我可以尝试子类化UICollectionViewFlowLayout并从右到左布局单元格,但我有点急于进入该区域。

这就是我的所作所为:

- (void)_scrollToTheRight
{
    NSIndexPath *lastIndexPath = [self.fetchedResultsController indexPathForObject:self.fetchedResultsController.fetchedObjects.lastObject];
    if (lastIndexPath)
    {
        [self.collectionView scrollToItemAtIndexPath:lastIndexPath atScrollPosition:UICollectionViewScrollPositionRight animated:NO];
    }
}

每个值都是:

lastIndexPath
(NSIndexPath *) $0 = 0x1f1754a0 <NSIndexPath 0x1f1754a0> 2 indexes [0, 21]

(NSInteger)[self.fetchedResultsController.fetchedObjects count]
(NSInteger) $3 = 22 [no Objective-C description available]

(NSInteger)[self.collectionView numberOfItemsInSection:0]
(NSInteger) $2 = 22 [no Objective-C description available]

最后注意:集合视图控制器是从UIPageViewController放在屏幕上的视图控制器的容器视图(iOS 6故事板中的新内容)加载的。

感谢。

编辑1: 所以我认为问题在于使用我的故事板布局(UICollectionViewController使用新的容器视图嵌入)会导致问题。 enter image description here 因为应用程序中的其他地方我也嵌入了视图控制器(正常UITableViewControllerviewDidAppear:在视图实际出现之前被调用。我怀疑这个设置没有正确地通知每个子视图控制器他们应该加载和布局他们的视图。

1 个答案:

答案 0 :(得分:1)

因为iOS 9可以使用

collectionView.semanticContentAttribute = .forceRightToLeft

scrollDirection = .horizontal和itemSize填满整个高度(即仅一条水平项目行)时从右向左滚动