Comment modifier la taille des cellules UICollectionViewCell de manière programmatique dans Swift?
j'ai un UICollectionView
avec un segmented control
pour passer d'une donnée à l'autre. Mais comment puis-je changer le UICollectionViewCell
taille des propriétés par programmation<!--5 ? ensuite, je peux personnaliser chaque style de façon appropriée pour chaque type de données.
Par exemple changer la largeur à 520 points et la hauteur à 100. Je suis nouveau sur le développement iOS et je suis connu avec les CSS :/
je sais comment le faire dans Xcode (évidemment) mais ne connaissent pas les méthodes correctes pour le changer en swift. Toutes les idées ou de la rétroaction est très apprécié (Y)
5 réponses
//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
}
/ / pour 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 3
Méthodes de @sumit-oberoi réponse ne sera pas appelé si vous utilisez Swift 3. Pour le faire fonctionner à faire de cette réglages:
conforme à la
UICollectionViewDelegateFlowLayout
protocole.implémenter ces méthodes:
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 }
notez les changements:
- ajouter
_
avantcollectionView
dans le nom de la méthode NSIndexPath
changementsIndexPath
Swift 3
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()
}
si vous utilisez le code de Gaurav Rami ci-dessous
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)
et obtenir ce message "Instantanés de vue qui n'a pas été rendu vide instantané. Assurez-vous que votre vue a été rendue au moins une fois avant snapshot ou snapshot après les mises à jour à l'écran." vous devez supprimer animé lors de la mise en page de vue de collection pour la vue
myCollectionView.setCollectionViewLayout(layout, animated: false)
ensuite, le message disparaîtra
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))
}