Comment faire pour centrer aligner les cellules d'un UICollectionView dans Swift3.0?
Description:
Réponse pour Objective-C
et Swift2.0
: Comment faire pour centrer aligner les cellules d'un UICollectionView?
J'ai l'habitude d'essayer de convertir le Swift2.0
de répondre à la Swift3.0
solution, cependant, la méthode:
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAtIndex section: Int) -> UIEdgeInsets {
let edgeInsets = (screenWight - (CGFloat(elements.count) * 50) - (CGFloat(elements.count) * 10)) / 2
return UIEdgeInsetsMake(0, edgeInsets, 0, 0);
}
il ne semble pas exister dans Swift3.0
,et la seule autre méthode que j'ai trouvé qui me semble utile:
func collectionView(_ collectionView: UICollectionView, transitionLayoutForOldLayout fromLayout: UICollectionViewLayout, newLayout toLayout: UICollectionViewLayout) -> UICollectionViewTransitionLayout {
<#code#>
}
mais je ne sais pas comment la mettre en œuvre correctement.
Question:
Comment faire pour centrer aligner les cellules d'un UICollectionView
dans Swift3.0
?
(Une simple solution générale pour iOS et tvOS serait parfait)
- Double Possible de Comment faire pour centrer aligner les cellules d'un UICollectionView?
Vous devez vous connecter pour publier un commentaire.
Tout rottenoats réponse est grand, il a un espacement supplémentaire bug et n'utilise pas beaucoup de disponibles swift 3 de la syntaxe. J'ai corrigé ça et réduit le nombre de dépendances des variables locales.
N. B.: Ce morceau de code ne fonctionne que pour un défilement horizontal, mais peut facilement être ajusté.
Cela a fini par être la solution que j'ai utilisée. Lire les commentaires de code pour une meilleure compréhension. Swift 3.0
Légère adaptation de @rottenoats réponse. C'est plus générique.
Surtout n'oubliez pas de faire votre vue-contrôleur de les rendre conformes à la UICollectionViewDelegateFlowLayout protocole.
La méthode que vous cherchez est avec une signature différente dans
Swift 3
. La nouvelle signature est: est-ceP. S: Cette méthode est présent dans
UICollectionViewDelegateFlowLayout
protocole.Espérons que cela pourrait l'aider.
En supposant que vous êtes conforme à UICollectionViewDelegateFlowLayout, il convient de:
Vous devez conforme à
UICollectionViewDelegateFlowLayout
protocole de trouver lecollectionView(_:layout:insetForSectionAt:)
méthode, il y est défini. la suite de la mise en œuvre fonctionne bien en swift 4 pour une horizontale collectionViewCe code doit centrer horizontalement de tout type de collecte de vue, même avec des éléments supplémentaires dans Swift 4.0:
N'oubliez pas, si vous n'êtes pas sous-classement
UICollectionViewController
, assurez-vous que votre classe est conforme àUICollectionViewDelegateFlowLayout
protocole