Utilisez cette méthode pour définir la largeur de hauteur de cellule personnalisée.
Assurez-vous d'ajouter ces protocoles
UICollectionViewDelegate
UICollectionViewDataSource
UICollectionViewDelegateFlowLayout
Si vous utilisez rapide 5 ou Xcode 11 et plus tard , vous devez définir Estimate Size
à l' none
aide de story - board pour le faire fonctionner correctement. Si vous ne le définissez pas, le code ci-dessous ne fonctionnera pas comme prévu.
Swift 4 ou version ultérieure
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)
}
}
Objectif 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)));
}
Assurez-vous d'ajouter le protocole
UICollectionViewDelegateFlowLayout
dans votreclass
déclarationla source
Si vous utilisez un storyboard et remplacez UICollectionViewDelegateFlowLayout, dans swift 5 et Xcode 11, définissez également la taille d'estimation sur Aucune
la source
UICollectionViewFlowLayout
semble par défautestimatedItemSize
àUICollectionViewFlowLayout.automaticSize
l'utilisation de IB , même si la documentation indique qu'il devrait par défautCGSizeZero
. Comme le déclare Apple,automaticSize
«active les cellules auto-dimensionnées pour votre vue de collection». C'est pourquoi les autres changements de taille dans IB ne font rien.J'ai enfin la réponse. Vous devriez étendre
UICollectionViewDelegateFlowLayout
Cela devrait fonctionner avec les réponses ci-dessus.
la source
Vous avez 2 façons de changer la taille de CollectionView.
Première façon -> ajouter ce protocole UICollectionViewDelegateFlowLayout
pour Dans mon cas, je veux diviser la cellule en 3 parties sur une ligne. J'ai fait ce code ci-dessous
Deuxième manière -> vous n'avez pas besoin d'ajouter UICollectionViewDelegateFlowLayout mais vous devez écrire du code dans la fonction viewDidload à la place comme code ci-dessous
Quoi que vous écriviez un code comme première ou seconde façon, vous obtiendrez le même résultat que ci-dessus. Je l'ai écrit. Ça a marché pour moi
la source
Rapport de taille selon la taille de l'iPhone:
Voici ce que vous pouvez faire pour avoir une largeur et une hauteur différentes pour les cellules en fonction de la taille de l'iPhone:
Et peut-être que vous devriez également désactiver vos contraintes de mise en page automatique sur la cellule pour que cette réponse fonctionne.
la source
La vue de collection a un objet de mise en page . Dans votre cas, il s'agit probablement d'une disposition de flux ( UICollectionViewFlowLayout ). Définissez la
itemSize
propriété de la disposition du flux .la source
dans Swift3 et Swift4, vous pouvez modifier la taille de cellule en ajoutant UICollectionViewDelegateFlowLayout et en implémentant c'est comme ceci:
ou si vous créez UICollectionView par programme, vous pouvez le faire comme ceci:
la source
swift4 swift 4 ios collection vue collectionview exemple xcode dernier code de travail échantillon
Ajoutez ceci dans la section Délégué du haut
UICollectionViewDelegateFlowLayout
et utilisez cette fonction
///// exemple de code complet
create on collection view et collectionview cell dans storyboard donnent la référence à la collection comme
@IBOutlet faible var cvContent: UICollectionView!
collez ceci dans le contrôleur de vue
la source
Essayez la méthode ci-dessous
la source
Swift 5 par programmation
la source
la source
2020, manière absolument simple:
Vous devez ajouter "UICollectionViewDelegateFlowLayout" ou, il n'y a pas de saisie semi-automatique:
Tapez "sizeForItemAt ...". Vous avez terminé!
C'est tout.
Exemple, si vous voulez "chaque cellule remplit toute la vue de collection":
la source
Une autre méthode consiste à définir la valeur directement dans la disposition du flux
la source
Vous devez donc définir à partir du storyboard pour l'attribut pour la collectionView dans l'estimation de la section de cellule Size sur none, et dans votre ViewController, vous devez avoir une méthode déléguée pour implémenter cette méthode:
optional func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize
la source
Essayez d'utiliser la méthode UICollectionViewDelegateFlowLayout. Dans Xcode 11 ou version ultérieure, vous devez définir la taille estimée sur aucune à partir du storyboard.
la source
Une manière simple:
Si vous avez juste besoin d'une taille fixe simple :
C'est tout ce qu'on peut en dire.
Dans le storyboard, changez simplement la classe de UICollectionView à SizedCollectionView.
Mais !!!
Notez que la classe de base est "UI 'I' CollectionView". «I» pour Initializer.
Il n'est pas si simple d'ajouter un initialiseur à une vue de collection. Voici une approche courante:
Vue de collection ... avec initialiseur:
Dans la plupart des projets, vous avez besoin d'une "vue de collection avec un initialiseur". Donc, vous aurez probablement de toute façon
UIICollectionView
(notez le I supplémentaire pour Initializer!) Dans votre projet.la source
Swift 5, paramètre UICollectionView programmatique Largeur et hauteur de cellule
la source
Ceci est ma version, trouvez votre ratio approprié pour obtenir la taille de la cellule selon vos besoins.
la source