Je voudrais créer une collectionView qui peut être défilée horizontalement et qui n'a qu'un seul élément de cellule visible et un partiellement visible. Les cellules doivent prendre toute la hauteur de la collectionView.
J'ai joué avec la sectionInset de collectionView. Mais je n'ai pas pu atteindre mon objectif.
Mon code:
import UIKit class BooksController: UIViewController { @IBOutlet weak var booksCollectionView: UICollectionView! override func viewDidLoad() { super.viewDidLoad() let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout() layout.sectionInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 20) layout.itemSize = CGSize(width: booksCollectionView.frame.width, height: booksCollectionView.frame.height) layout.minimumInteritemSpacing = 10 layout.minimumLineSpacing = 10 layout.scrollDirection = .horizontal booksCollectionView.collectionViewLayout = layout booksCollectionView.register(UINib(nibName: "BookCell", bundle: .main), forCellWithReuseIdentifier: "BookCell") booksCollectionView.dataSource = self booksCollectionView.delegate = self // Do any additional setup after loading the view. } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } /* // MARK: - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation override func prepare(for segue: UIStoryboardSegue, sender: Any?) { // Get the new view controller using segue.destinationViewController. // Pass the selected object to the new view controller. } */ } extension BooksController: UICollectionViewDataSource { func numberOfSections(in collectionView: UICollectionView) -> Int { return 1 } func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return 10 } func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { if let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "BookCell", for: indexPath) as? BookCell { return cell } return UICollectionViewCell() } } extension BooksController: UICollectionViewDelegate, UICollectionViewDelegateFlowLayout { // func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAtIndex section: Int) -> UIEdgeInsets { // return UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 20) // } }
Cible (quelque chose de similaire à la collectionVoir ici) p>
Ma sortie
4 Réponses :
Utilisez ce morceau de code
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { let width = self.view.frame.width - 100 let height = self.view.frame.height return CGSize(width: width, height: height) }
N'oubliez pas d'ajouter ce délégué
UICollectionViewDelegateFlowLayout
Il pourrait être préférable d'utiliser le collectionview.frame code> au lieu de
self.view.frame code> puisque la collection code> peut être plus petite que la vue
code>.
Lorsque la collectionView fait défiler, j'ai besoin que les seconds éléments (suivants) soient entièrement visibles. J'ai essayé la méthode ci-dessus. Mais de cette façon, lorsque je fais défiler, le deuxième élément n'est pas entièrement visible. au lieu de cela, le reste est visible
Que voulez-vous dire n'est pas entièrement visible? Vous voulez l'effet instantané? Comment pourrait-il ne pas être entièrement visible si sa largeur est moins grande que la vue de la collection?
Ajouter UICollectionViewDelegateFlowLayout
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { return CGSize(width: self.view.frame.width, height: self.view.frame.height) }
Lorsque la collectionView fait défiler, j'ai besoin que les seconds éléments (suivants) soient entièrement visibles. J'ai essayé la méthode ci-dessus. Mais de cette façon, lorsque je fais défiler, le deuxième élément n'est pas entièrement visible. au lieu de cela, le reste est visible
Vous pouvez utiliser si vous avez besoin d'afficher la moitié de la deuxième cellule de vue de collection
collectionView.contentInset = UIEdgeInsets.init (haut: 0, gauche: 10, bas: 0, droite: 10)
Pour la hauteur et avec la vue de la collection, vous pouvez essayer le délégué CollectionViewLayout
Dans le storyboard, supprimez les inserts par défaut dans UICollectionView.
Semble être ce que vous recherchez: stackoverflow.com/questions/35045155/...
Réduisez la largeur de cellule à 50 ou 100 selon vos besoins.