1. ホーム
  2. ios

[解決済み] デバイスの向きを変えてUICollectionViewCellのサイズを変更する

2023-02-04 12:02:43

質問

私は UICollectionViewUICollectionViewFlowLayout .

各セルの大きさを設定するのは

collectionView:layout:sizeForItemAtIndexPath:

縦長から横長に切り替えたとき、セル間にパディングスペースを残さずに、各セルのサイズを完全にCollectionViewのサイズに合うように調整したい。

質問です。

1) 回転イベントの後、セルのサイズを変更するにはどうすればよいですか。

2) さらに良いことに、セルが常に画面サイズ全体に収まるようなレイアウトにするにはどうしたらよいでしょうか?

どのように解決するのですか?

1) 複数のレイアウトオブジェクトをメンテナンスして入れ替えることもできますが、もっと簡単な方法があります。ただ、以下をあなたの UICollectionViewController サブクラスに追加し、必要に応じてサイズを調整します。

- (CGSize)collectionView:(UICollectionView *)collectionView
                  layout:(UICollectionViewLayout *)collectionViewLayout
  sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{    
    // Adjust cell size for orientation
    if (UIDeviceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation])) {
        return CGSizeMake(170.f, 170.f);
    }
    return CGSizeMake(192.f, 192.f);
}

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
    [self.collectionView performBatchUpdates:nil completion:nil];
}

呼び出し -performBatchUpdates:completion: を呼び出すと、レイアウトが無効になり、アニメーションでセルのサイズが変更されます(実行する追加調整がない場合は、両方のブロックパラメータにnilを渡せばよいでしょう)。

2) アイテムサイズをハードコードする代わりに -collectionView:layout:sizeForItemAtIndexPath でアイテムのサイズをハードコーディングする代わりに、collectionViewの境界の高さまたは幅を、画面に収めたいセルの数で割るだけです。コレクションビューが水平にスクロールする場合は高さを、垂直にスクロールする場合は幅を使用します。