2017-02-07 17 views
0

私のuicollectionviewデリゲートにこのコードがあります。基本的には、colectionviewのサイズに基づいてセルのサイズを設定することです。UICollectionViewのサイズ変更後にUICollectionViewCellのサイズを変更する

- (CGSize)collectionView:(UICollectionView *)collectionView 
        layout:(UICollectionViewLayout *)collectionViewLayout 
    sizeForItemAtIndexPath:(NSIndexPath *)indexPath { 

    CGFloat ratio = 200.0/280.0; // w/h 
    CGFloat cellWidth = (collectionView.frame.size.width-50)/4.0; 
    CGFloat cellHeight = cellWidth/ratio; 

    CGSize cellSize = CGSizeMake(cellWidth, cellHeight); 

    return cellSize; 
} 

collectionViewを再ロードせずにcollectionViewフレームを変更した後、このデリゲートを強制的に実行するにはどうすればよいですか?私が考えている方法の1つは、表示されているすべてのセルをループすることによって手動でこの機能を呼び出すことですが、それほどシンプルなものには重すぎるようです。

HELLLPPPPPP

+0

あなたの質問に既に追加した最も簡単な解決策は、collectionViewを再読み込みすることです。 –

+0

デリゲートを強制するのではなく、デリゲートのデータをコピーして関数に追加することができます。デリゲートの関数を呼び出し、どこに呼び出すかを指定します。あなたは何を言っていますか? – User511

+0

コレクションビューのフレームを変更した後、この行を入力して試してみてください。 yourCollectionView.dataSouce = self; –

答えて

0

[OK]を私は自分自身で解決策を見つけました。このデリゲートをcollectionviewのサイズ変更後に再度実行させるには、SINGLEセルをリロードするだけです。たとえば、最初のセル。次に、collectionviewは自動的にすべてのセルのサイズを変更します。

NSIndexPath *firstItem = [NSIndexPath indexPathForRow:0 inSection:0]; 
      [_cardCollectionView performBatchUpdates:^{ 
       [_cardCollectionView reloadItemsAtIndexPaths:@[firstItem]]; 
      } completion:^(BOOL finished) {}]; 

とにかくお手伝いをしてくれてありがとう。

0

あなたは次のように手動でこのデリゲートを呼び出すことができます。

CGSize size = [self collectionView:self.collectionView 
          layout:self 
      sizeForItemAtIndexPath:indexPath]; 
+0

この方法は、すべてのセルをループする必要があることを意味します。私はそれをそうしないことを好む。ありがとうございました。 – GeneCode

関連する問題