Swift で UICollectionViewCell のサイズをプログラム的に変更するにはどうすればいいですか? 質問する

Swift で UICollectionViewCell のサイズをプログラム的に変更するにはどうすればいいですか? 質問する

データの切り替えに を使用しています。しかし、サイズプロパティを変更するにはどうすればいいUICollectionViewでしょうかsegmented controlUICollectionViewCellプログラム的に? その後、各データ タイプに応じて各スタイルを適切にカスタマイズできます。

例えば幅を 520 ポイント、高さを 100 に変更します。私は iOS 開発は初心者ですが、CSS には経験があります :/

Xcode でそれを実行する方法は知っていますが (当然ですが)、Swift で変更する正しい方法は知りません。アイデアやフィードバックがあれば大歓迎です (Y)

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

ベストアンサー1

クラスが UICollectionViewDelegateFlowLayout に準拠していることを確認してください (swift4 の場合)

eg. class MyClass: UICollectionViewDelegateFlowLayout

Swift 3以前

//Use for size
func collectionView(collectionView: UICollectionView,
        layout collectionViewLayout: UICollectionViewLayout,
        sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {

    }
//Use for interspacing
    func collectionView(collectionView: UICollectionView,
        layout collectionViewLayout: UICollectionViewLayout,
        minimumInteritemSpacingForSectionAtIndex section: Int) -> CGFloat {
            return 1.0
    }

    func collectionView(collectionView: UICollectionView, layout
        collectionViewLayout: UICollectionViewLayout,
        minimumLineSpacingForSectionAtIndex section: Int) -> CGFloat {
            return 1.0
    }

// Swift 3の場合

func collectionView(_ collectionView: UICollectionView,
                    layout collectionViewLayout: UICollectionViewLayout,
                    sizeForItemAt indexPath: IndexPath) -> CGSize {

}

func collectionView(_ collectionView: UICollectionView,
                    layout collectionViewLayout: UICollectionViewLayout,
                    minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
    return 1.0
}

func collectionView(_ collectionView: UICollectionView, layout
    collectionViewLayout: UICollectionViewLayout,
                    minimumLineSpacingForSectionAt section: Int) -> CGFloat {
    return 1.0
}

// Swift 4の場合

extension MyClass: UICollectionViewDelegateFlowLayout { 
        func collectionView(_ collectionView: UICollectionView,
                            layout collectionViewLayout: UICollectionViewLayout,
                            sizeForItemAt indexPath: IndexPath) -> CGSize {

        }

        func collectionView(_ collectionView: UICollectionView,
                            layout collectionViewLayout: UICollectionViewLayout,
                            minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
            return 1.0
        }

        func collectionView(_ collectionView: UICollectionView, layout
            collectionViewLayout: UICollectionViewLayout,
                            minimumLineSpacingForSectionAt section: Int) -> CGFloat {
            return 1.0
        }
    }

Swift 3では上記と同じコードを使用しますが、クラスがUICollectionViewDelegateFlowLayoutプロトコルに準拠していることを確認してください

おすすめ記事