6

我想要一个从右到左滚动的 UICollectionView,即当它在加载后出现在屏幕上时,集合视图应该首先显示最右边的单元格/项目,然后在左侧添加其余部分。我已经尝试过这里介绍的解决方法,但是如果我调用它,viewWillAppear:我会得到:

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

如果我滚动到最后一个项目,viewDidAppear:它工作正常,除了现在用户首先看到左边的项目,然后滚动到最后一个项目。还尝试contentOffset在 UICollectionView 上使用该属性(因为它是 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使用新的容器视图嵌入)导致了问题。 在此处输入图像描述 因为在应用程序的其他地方,我还嵌入了视图控制器(一个普通的UITableViewControllerviewDidAppear:在视图实际出现之前被调用。我怀疑这个设置没有正确通知每个子视图控制器他们应该加载和布局他们的视图。

4

1 回答 1

3

由于 iOS 9 可以使用

collectionView.semanticContentAttribute = .forceRightToLeft

用于从右到左滚动,scrollDirection = .horizontal并且 itemSize 填充整个高度(即只有一个水平的项目行)

于 2018-10-29T20:17:39.723 回答