Autolayout + UITableViewCell

muqaddarmuqaddar Administrateur
juin 2014 modifié dans API UIKit #1

Salut,


 


Je pense avoir compris comment fonctionne Autolayout pour positionner des vues à  l'intérieur d'une vue depuis IB.


 


Par contre, je ne comprends pas comment marchent les contraintes générales sur la vue.


 


Par exemple, j'ai une UITableView qui contient des UITableViewCell (customizées par IB). Je n'arrive pas à  dire à  mon UITableViewCell d'adapter sa largeur à  celle de la UITableView. Alors que je n'ai pas de mal à  adapter tout le contenu interne de la UITableViewCell.


 


J'ai essayé des changements ici:


 


Réponses

  • CéroceCéroce Membre, Modérateur
    Une UITableViewCell a TOUJOURS la largeur de la table qui la contient, Autolayout ou pas.
    Utilise Autolayout pour redimensionner les sous-vues de la UITableViewCell.
  • AliGatorAliGator Membre, Modérateur
    juin 2014 modifié #3
    Ce sont les UITableViews qui se débrouillent pour ajouter elles-même les UITableViewCell en subview à  la TableView, et pour les supprimer ensuite quand elle disparaissent de la zone visible quand tu scrolles, pour les recycler, etc.

    Et du coup au final c'est la UITableView qui rajoute à  la volée (lors du reuse) les contraintes entre la UITableView et ses cells pour s'assurer automatiquement qu'elles sont la même largeur.

    ---

    C'est pas comme si tu faisais un XIB ou Storyboard dans lequel tu mettais une UIView et directement ses Subviews. là  tu design une UITableView d'un côté, et des UITableViewCells de l'autre, et c'est la TableView qui va ajouter les cells en subviews quand elle en aura besoin, après avoir appelé "tableView:cellForRowAtIndexPath:".

    Après si tu fais ton design à  la fois de ta TableView et de ses cells dans un même fichier XIB/Storyboard, le fait que dans les Storyboard les templates de cellules associées à  la UITableView sont représentés directement dans la TableView visuellement te trompe peut-être sur ce point c'est pour ça ?


    [EDIT] Grillé par Céroce.
  • muqaddarmuqaddar Administrateur

    Je viens de me rendre compte que ma question était stupide effectivement.


     


    Je vais essayer de voir d'où vient mon problème, j'imagine que c'est la UITableView qui ne s'étire pas correctement. Je reviens vers vous bientôt.


  • CéroceCéroce Membre, Modérateur

    [EDIT] Grillé par Céroce.

    C'est ce qui arrive quand on tape des pavés !
  • muqaddarmuqaddar Administrateur

    Bon, oui, hier j'ai été un peu pressé et je me suis mélangé les pinceaux, il est évident que UITableViewCell s'adapte à  UITableView.


     


    J'ai résolu mon problème dans les contraintes de la superview qui contient la UITableView (mais qui n'utilise pas Autolayout pour le coup).


     


    ---


     


    Pour en revenir au titre du sujet, j'ai 11 sous-vues (image, texte...) dans mon UITableView.


     


    Peut-on indiquer à  une sous-vue de ne pas s'afficher du tout si la largeur de la cellule passe sous une certaine taille (par exemple 400px) ?


     


    En gros, j'ai:


     


    image1 - texte - image2 - image3


     


    Si la largeur de la cellule réduit trop, je voudrais dire à  image2 de ne pas s'afficher, pour que texte ait assez de place. Je me doute que c'est faisable par le code, mais dans IB ?


     


    (je ne sais pas si c'est une bonne pratique néanmoins)


     


  • AliGatorAliGator Membre, Modérateur
    Dans le IB de Xcode 6 y'a ce qu'il fait avec les Size Classes à  priori. Mais dans Xcode 5 je ne pense pas.
  • Tu peux essayer comme ça :


     


    1) crée un IBOutlet @property myConstraint sur ta contrainte


    2) crée un @property (readonly) BOOL isBigEnough



    float const limit = 400 ;

    - (BOOL)isBigEnough
    {
    return myConstraint.constant >= limit
    }

    3) dans IB tu connectes la @property isHidden de tes views à  isBigEnough


  • AliGatorAliGator Membre, Modérateur

    3) dans IB tu connectes la @property isHidden de tes views à  isBigEnough

    Heu tu ferais ça comment ? Sous OSX avec les bindings je veux bien, mais sous iOS ?
  • Ah oui, désolé !!


     


    Du coup, c'est chiant... avec des observers ?


     


    PS : pour le mainteneur du site (@muqqadar ?)


    -> faute d'orthographe : 

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