[Résolu] UICollectionViewCell : Plein écran

iLandesiLandes Membre
octobre 2015 modifié dans API UIKit #1

J'ai suivi quelque auto pour mettre en place une Collection view.


 


J'arrive plus ou moins à  faire ce que je veux mais je ne comprend pas comment définir qu'une seule cell soit afficher à  l'écran.


 


Dans l'idéal je souhaite avoir une Cell réutilisable (ça j'y arrive) et faire passer affichage d'une cell à  l'autre avec un mouvement du doigt.


 


J'y suis presque sauf que j'ai toujours un ensemble de Cell à  l'écran. Généralement 4.


 


D'avance merci pour votre aide, je me perd un peu dans le clickodrome de xCode 7


Réponses

  • colas_colas_ Membre
    septembre 2015 modifié #2

    UICollectionView hérite de UIScrollView, donc tu vas utiliser avec profit pagingEnabled !


     


    Ensuite, il faut que tu magouilles :


    -> soit ton layout


    -> soit la size de ta cell. À ta place, je pencherai pour ce hack-là  : je crée une cell qui prend toute la taille de l'écran et à  l'intérieur, j'ai une sous-vue qui est ma cell réelle. Tu dois paramétrer bien ton layout aussi. Mais ici, comme ta cell prend tout l'écran, ça devrait pas être compliqué.


     


    La solution propre consisterait à  créer ton propre layout. ça t'amènerait à  lire pas mal de doc et tu perdrais les avantages de UIFlowLayoutSomething...


     


    N'hésite pas à  reposer des questions si tu comprends pas/ n'y arrives pas.


  • DrakenDraken Membre
    septembre 2015 modifié #3

    J'y suis arrivé en utilisant un UICollectionViewFlowLayer.


     


    Le délégué a une méthode pour définir la taille d'une cellule. Il suffit de lui communiquer la taille de l'écran, pour avoir des cellules "fullscreen".



    func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
    return UIScreen.mainScreen().bounds.size
    }



    Le source (c'est juste du code) est en Xcode 6. Je dois le convertir en Xcode 7 pour le rendre utilisable. Si j'ai le courage, je ferais un petit auto sur le sujet. Scrolling vertical ou horizontal ?


     


    EDIT : J'ai extrait ce code, qui peut t'aider :



    class ViewController: UIViewController, UICollectionViewDelegateFlowLayout, UICollectionViewDataSource {

    var collectionView : UICollectionView?

    override func viewDidLoad() {
    super.viewDidLoad()

    self.view = UIView(frame: UIScreen.mainScreen().bounds)

    let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
    layout.sectionInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
    layout.scrollDirection = UICollectionViewScrollDirection.Horizontal
    layout.minimumLineSpacing = 0.0

    collectionView = UICollectionView(frame: self.view.frame, collectionViewLayout: layout)

    collectionView?.dataSource = self
    collectionView?.delegate = self

    self.collectionView?.registerClass(MaCellule.self, forCellWithReuseIdentifier: reuseIdentifier)

    collectionView?.backgroundColor = UIColor.whiteColor()
    collectionView?.pagingEnabled = true
    self.view.addSubview(collectionView!)

    }



  •  


    La solution propre consisterait à  créer ton propre layout. ça t'amènerait à  lire pas mal de doc et tu perdrais les avantages de UIFlowLayoutSomething...


     


    N'hésite pas à  reposer des questions si tu comprends pas/ n'y arrives pas.



     


     


    J'avoue galèrer dans tout ces paramètre. voici ou je suis arrivé, c'est pas très brillant. 


     


    Ci-joint un projet test


     


    Merci pour votre aide, mais j'en viens à  douter de l'utilité de passer par une collectionview


  • DrakenDraken Membre
    septembre 2015 modifié #5

    Franchement ce n'est pas compliqué, avec du code. 


     


    EDIT : Ah oui, je vois l'ampleur du problème. Je peux t'aider, mais ce sera entièrement avec du code, sans passer par storyboard.

  • Quelqu'un signe ici un truc du genre "quand il n'y a pas de solution c'est qu'il n'y a pas de problème"


     


    En méditant la dessus je m'aperçois que je cherche dans la mauvaise direction et que ce que souhaite réalisé est en fait bien lus simple avec une Page View Controller.


     


    J'ai trouvé ici un tuto bien utile


     


    Merci de vos contributions.


     


    @Draken : Je reconnais dans ton dernier post les directives enseignées sur FUN ? Je suis assez d'accord avec F. Kordon en règle générale mais Apple dicte souvent sa loi et quand Apple dit il faut faire comme ça même si on peut faire autrement mieux vaut écouter Apple, sinon gare au crash lors des mises à  jours (cf l'utilisation des autolayout par exemple).


  • DrakenDraken Membre
    septembre 2015 modifié #7

    Pas de rapport avec FUN. Je ne cherche pas à  devenir développeur,  juste à  créer une seule application. J'espère ensuite avoir les moyens de payer un dév pour faire le boulot technique qui n'est pas ma tasse de thé. Sans cela je me plongerais à  fond dans Storyboard et compagnie.



  • En méditant la dessus je m'aperçois que je cherche dans la mauvaise direction et que ce que souhaite réalisé est en fait bien lus simple avec une Page View Controller.




     


    L'avantage de UICollectionView, c'est le recyclage automatique.


    Je n'ai jamais utilisé Page View Controller, mais il me semble que le recyclage n'est y pas géré.

  • DrakenDraken Membre
    octobre 2015 modifié #9

    iLandes, voici un exemple fonctionnel d'UICollectionViewCell, reprenant les images de ton exemple. Et c'est plus simple qu'avec un PageViewControler. 


     


  • Merci beaucoup Draken,


     


    Cela me servira pour une prochaine appli et cela me permet de clore le sujet [Résolu].


     


    Merci 1000 fois


Connectez-vous ou Inscrivez-vous pour répondre.