1. ホーム
  2. swift

[解決済み] UICollectionViewCellの幅と高さをプログラムで設定する方法

2022-04-28 06:45:45

質問

を実装しようとしています。 CollectionView . Autolayoutを使用しているとき、セルのサイズは変わりませんが、その配置は変わりません。

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

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

で設定してみました。 CellForItemAtIndexPath

collectionCell.size = size

が、うまくいかなかった。

これを実現する方法はあるのでしょうか?

編集 :

コレクションビューの幅と高さを変更するだけです。Constraintsに矛盾があるのでしょうか?それについて何かアイデアはありますか?

解決方法は?

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

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

UICollectionViewDelegate

UICollectionViewDataSource

UICollectionViewDelegateFlowLayout

を使用している場合 迅速5 または xcode 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)));
}