右から左にスクロールする 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 ストーリーボードの新機能) から読み込まれます。
ありがとう。
EDIT 1:UICollectionViewController
問題は、ストーリーボードレイアウト(新しいコンテナビューを使用して埋め込まれた)を使用する
と問題が発生することだと思います。ビュー コントローラー (通常の)
も埋め込んでいるアプリの他の場所では、ビューが実際に表示される前に呼び出されるためです。この設定では、各子ビュー コントローラーに、ビューを読み込んでレイアウトする必要があることを適切に通知していないと思われます。UITableViewController
viewDidAppear: