データを切り替えるsegmented control
を持つUICollectionView
があります。しかし、UICollectionViewCell
サイズプロパティをプログラムで変更するにはどうすればよいですか?その後、各データ型に合わせて各スタイルを適切にカスタマイズできます。
たとえば、幅を520ポイントに、高さを100に変更します。私はiOS開発の初心者で、CSSの経験があります:/
私はXcodeでそれを行う方法を知っています(明らかに)が、Swiftでそれを変更する正しい方法を知りません。アイデアやフィードバックは大歓迎です(Y)
クラスの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に準拠していることを確認してください
Swift
@ sumit-oberoi answerのメソッド呼び出されない Swiftを使用している場合3.動作させるには、次の調整を行います。
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
}
変更に注意してください:
collectionView
の前に_
を追加しますNSIndexPath
はIndexPath
に変更されますSwift
override func viewDidLoad() {
super.viewDidLoad()
let cellSize = CGSize(width:80 , height:80)
let layout = UICollectionViewFlowLayout()
layout.scrollDirection = .vertical //.horizontal
layout.itemSize = cellSize
layout.sectionInset = UIEdgeInsets(top: 1, left: 1, bottom: 1, right: 1)
layout.minimumLineSpacing = 1.0
layout.minimumInteritemSpacing = 1.0
myCollectionView.setCollectionViewLayout(layout, animated: true)
myCollectionView.reloadData()
}
gaurav Ramiのコードを使用する場合
let cellSize = CGSize(width:80 , height:80)
let layout = UICollectionViewFlowLayout()
layout.scrollDirection = .vertical //.horizontal
layout.itemSize = cellSize
layout.sectionInset = UIEdgeInsets(top: 1, left: 1, bottom: 1, right: 1)
layout.minimumLineSpacing = 1.0
layout.minimumInteritemSpacing = 1.0
myCollectionView.setCollectionViewLayout(layout, animated: true)
「レンダリングされていないビューのスナップショットは空のスナップショットになります。スナップショットの前または画面更新後のスナップショットの前にビューが少なくとも1回レンダリングされていることを確認してください。」コレクションビューのビューレイアウトを設定するときにアニメーションを削除する必要があります
myCollectionView.setCollectionViewLayout(layout, animated: false)
その後、メッセージが消えます
first Conform protocol the UICollectionViewDelegateFlowLayout
set width and height UICollectionViewCell
UIcollectionViewCell Hight = 300;
UIcollectionViewCell Width = 380;
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout,sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: CGFloat((380)), height: CGFloat(300))
}