1

私は現在、画像のグリッドを含むコレクション ビューを持っています。画像を選択すると、フルスクリーン画像を含む別のコレクション ビューに移動します。

これを行うには、次を使用しています:

    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"collectionView"])

    {
        QuartzDetailViewController *destViewController = (QuartzDetailViewController *)segue.destinationViewController;

        NSIndexPath *indexPath = [[self.collectionView indexPathsForSelectedItems] objectAtIndex:0];

        destViewController.startingIndexPath = indexPath;

        [destViewController.collectionView scrollToItemAtIndexPath:indexPath atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally animated:NO];

        [self.collectionView deselectItemAtIndexPath:indexPath animated:NO];
    }
}

そして私の詳細ビューで:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
if (_startingIndexPath) {
    NSInteger currentIndex = floor((scrollView.contentOffset.x - scrollView.bounds.size.width / 2) / scrollView.bounds.size.width) + 1;
    if (currentIndex < [self.quartzImages count]) {
        self.title = self.quartzImages[currentIndex][@"name"];
    }
}
}

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    UICollectionViewFlowLayout *layout = (UICollectionViewFlowLayout *)self.collectionView.collectionViewLayout;
    layout.itemSize = self.view.bounds.size;

    [self.collectionView scrollToItemAtIndexPath:self.startingIndexPath atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally animated:NO];
}

横向きに回転すると、画像が消えて上部のタイトルが変わります。グリッドに戻ってセルをもう一度選択すると、詳細ビ​​ューに戻りますが、タイトルは別のセルのもので、画像は半分を示していますと 2 つの異なる画像の間の半分。

デバイスをローテーションすると、ログに次のメッセージも表示されます。

2013-06-04 17:39:53.869 PhotoApp[6866:907] the behavior of the UICollectionViewFlowLayout is not defined because:
2013-06-04 17:39:53.877 PhotoApp[6866:907] the item height must be less that the height of the UICollectionView minus the section insets top and bottom values.

オリエンテーションをサポートするようにこれを修正するにはどうすればよいですか。

ありがとう

4

1 に答える 1

1

縦向きのセルのサイズは横向きには大きすぎるため、コレクション ビューのレイアウトを無効にする必要があります。

親 UIViewController に次のようなものを書くと、問題が解決するはずです。

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
  [self.collectionView.collectionViewLayout invalidateLayout];
} 
于 2013-07-20T21:17:24.023 に答える