我希望有一个从右向左滚动的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
使用新的容器视图嵌入)会导致问题。
因为应用程序中的其他地方我也嵌入了视图控制器(正常UITableViewController
)viewDidAppear:
在视图实际出现之前被调用。我怀疑这个设置没有正确地通知每个子视图控制器他们应该加载和布局他们的视图。
答案 0 :(得分:1)
因为iOS 9可以使用
collectionView.semanticContentAttribute = .forceRightToLeft
在scrollDirection = .horizontal
和itemSize填满整个高度(即仅一条水平项目行)时从右向左滚动