UICollectionViewCellの幅と高さをプログラムで設定する方法 質問する

UICollectionViewCellの幅と高さをプログラムで設定する方法 質問する

を実装しようとしていますCollectionView。Autolayout を使用すると、セルのサイズは変更されませんが、配置は変更されます。

今私はむしろそれらのサイズを変更したいです。例えば

var size = CGSize(width: self.view.frame.width/10, height: self.view.frame.width/10)

私は設定してみましたCellForItemAtIndexPath

collectionCell.size = size

しかし、うまくいきませんでした。

これを実現する方法はありますか?

編集:

どうやら、回答によって CollectionView の幅と高さだけが変わるようです。制約に矛盾がある可能性はありますか? それについて何かアイデアはありますか?

ベストアンサー1

このメソッドを使用して、カスタム セルの高さの幅を設定します。

このプロトコルを必ず追加してください

UICollectionViewDelegate

UICollectionViewDataSource

UICollectionViewDelegateFlowLayout

使用している場合スイフト5またはエックスコード11後で適切に動作させるには、ストーリーボードを使用するEstimate Sizeように設定する必要がありますnone。これを設定しないと、以下のコードは期待どおりに動作しません。

ここに画像の説明を入力してください

Swift 4以降

extension YourViewController: UICollectionViewDelegate {
    //Write Delegate Code Here
}

extension YourViewController: UICollectionViewDataSource {
    //Write DataSource Code Here
}

extension YourViewController: UICollectionViewDelegateFlowLayout {
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        return CGSize(width: screenWidth, height: screenWidth)
    }
}

オブジェクティブC

@interface YourViewController : UIViewController<UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout>

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
    return CGSizeMake(CGRectGetWidth(collectionView.frame), (CGRectGetHeight(collectionView.frame)));
}

おすすめ記事