2

J'essaye de modifier la largeur de la cellule de sorte que peu importe la taille de l'écran, j'aurai score1.count cellules dans une rangée. Le code que j'utilise pour ma vue de collection est le suivant:Modification de la largeur d'une CollectionViewCell

func numberOfSections(in collectionView: UICollectionView) -> Int { 
    return 1 
} 
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
    return self.items.count 
} 

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath as IndexPath) as! MyCollectionViewCell 

    cell.myLabel.text = String(self.items[indexPath.item]) 

    return cell 
} 

Ceci est la fonction qui cible la largeur de la cellule.

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout,sizeForItemAt indexPath: IndexPath) -> CGSize { 
    let size = Int(self.view.frame.size.width)/(score1.count + 1) 
    return CGSize(width: CGFloat(size), height: 80) 
} 

J'ai passé de nombreuses heures à différentes sources et d'essayer des choses différentes, mais la vue de collection n'a jamais le bon nombre de cellules. Une idée est que c'est peut-être parce que j'ai la taille de la cellule définie en mise en page automatique, mais chaque fois que je vais le changer se bloque xcode. Des idées sur le contournement de la mise en page automatique? Ou comment changer la disposition automatique?

Merci!

+0

Êtes-vous le réglage de la 'UICollectionViewFlowLayout'? –

+0

Non, mais je ne le référence pas dans le code. –

+1

a changé le UICollectionViewDelegate en UICollectionViewDelegateFlowLayout et cela a fonctionné! Merci les gars! –

Répondre

0

essayer cette

extension YourViewController : UICollectionViewDelegateFlowLayout{ 

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { 
    let rowItems:CGFloat = 4 
    let padding:CGFloat = 2 
    let width = (collectionView.bounds.width/rowItems) - padding //Change width as per your requirement 
    let height = collectionView.bounds.height - (2 * padding)//Change height as per your requirement 
    return CGSize(width: width, height: height) 
    } 

} 
+0

Je suis sûr que ces réponses fonctionnent, mais elles sont toujours conformes à ce que j'ai spécifié dans les options de mise en page du storyboard. Comment puis-je remplacer cela? Laissez-le vide? Ou y a-t-il une ligne de code qui me manque ailleurs? –

0

Vous pouvez changer votre tailleForItemAtIndexPath en tant que. Vous pouvez affecter la taille de la cellule après la soustraction de la marge et la plongée par numéro de cellule.

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout,sizeForItemAt indexPath: IndexPath) -> CGSize { 
     let size = (Int(collectionView.bounds.width) - (score1.count+1)*5) /(score1.count) // 5 is the margin you want to keep in between 2 cells 
     return CGSize(width: CGFloat(size), height: 80) 
    } 

Faites-moi savoir si vous avez des questions. Je voudrais essayer de clarifier.

+0

Vous avez un trop de parenthèses après le 5. Cela fonctionne mieux mais a encore un de plus que le score1.count. –

+0

Yepp mon erreur. En fait m loin de mon système, m acccessing à partir du mobile. "Cela fonctionne mieux mais a encore un de plus que le score1.count." Qu'est-ce que ça veut dire. – luckyShubhra

+0

qu'obtenez-vous – luckyShubhra