0
votes

UICollectionView avec cellule partiellement visible

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>

 Quelque chose de similaire à ceci

Ma sortie

 Ceci est ma sortie a>


2 commentaires

Semble être ce que vous recherchez: stackoverflow.com/questions/35045155/...


Réduisez la largeur de cellule à 50 ou 100 selon vos besoins.


4 Réponses :


0
votes

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


3 commentaires

Il pourrait être préférable d'utiliser le collectionview.frame au lieu de self.view.frame puisque la collection peut être plus petite que la vue .


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?



0
votes

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)
    }


1 commentaires

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



0
votes

Utilisez ce pod MSPeekCollectionViewDelegateImplementation

GitHub


0 commentaires

0
votes

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


1 commentaires

Dans le storyboard, supprimez les inserts par défaut dans UICollectionView.