layout image, texte ne se positionne pas ????

2»

Réponses

  • excuse moi,


     


    Oui cela est bon, je te remercie beaucoup de ton aide


  • Ouah Draken chapeau pour ces explications !


     


    Johanna je ne connaissais pas ta solution magique, très intéressant !


     


    Merci à  vous deux !


  • Vraiment bien merci beaucoup...


    L'identifier on en fait quoi je suppose que c'est pour le retrouver dans le code au cas ou ?




  • L'identifier on en fait quoi je suppose que c'est pour le retrouver dans le code au cas ou ?




    Euh .. je  n'ai pas parlé d'un identifiant, moi. De quoi veux-tu parler ?

  • @Draken :


    Dans le Panel en bas de Multiplier, il y a un champ identifier.$


     


    @Gercofis :


    Je ne l'ai jamais vraiment utilisé. Mais je pense que cela permet d'être plus puissant que des "tags", on peut très bien ne pas mettre d'IBOutlet et énumérer les contraintes d'une vue, ou lorsqu'on les créées par code. Après, ils sont peut-être mêmes printés quand tu fais [maContraint description] (ce qui serait très utile quand les contraints pètent et que XCode t'envoie un gros pâté pas toujours facile à  lire).




  • @Draken :


    Dans le Panel en bas de Multiplier, il y a un champ identifier.$


     




    Ah oui effectivement, je n'y pensais plus. Faut dire que j'ai écrit ce toto le lendemain de jour où j'ai compris comment utiliser Storyboard (oui, j'ai le cerveau lent sur certaines choses). 


     


    Comme le dit Larme, cela permet d'associer un nom à  une contrainte pour la retrouver facilement. On peut tracer une outlet avec Storyboard pour agir sur une contrainte par code, ou utiliser le nom pour la localiser. Enfin en théorie .. en pratique j'ai essayé une fois, sans y parvenir.



    @IBOutlet weak var ui_label: UILabel!

    override func viewDidLoad() {
    super.viewDidLoad()

    print (ui_label)
    print (ui_label.constraints)

    for contrainte in ui_label.constraints {
    print ("Contrainte : ", contrainte)
    }

    }



     


    <UILabel: 0x7fe775406590; frame = (143 311; 90 45); text = 'Label'; opaque = NO; autoresize = RM+BM; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x600000094550>>


    []



     


    J'avais défini deux contraintes de centrage avec Storyboard. Elles devraient être stockées dans le tableau constraints. Pourtant il est vide à  l'exécution !!! Il faudrait que je refasse le test en créant les contraintes par code.

  • LarmeLarme Membre
    septembre 2017 modifié #38

    Je confirme donc :

     


     


    J'ai



    @property (nonatomic, weak) IBOutlet UIView *testView;
    @property (nonatomic, weak) IBOutlet NSLayoutConstraint *widthContraint;

    testView a comme contraintes : Fixed Width (avec identifier WidthConstraint), Fixed Height (avec identifier HeightConstraint), Fixed Ratio (avec identifier ConstraintForRatio).


    Donc si je modifie la Width, cela devrait casser.


     


    Dans mon viewDidLoad:



    NSArray *c = [[self testView] constraints];
    NSLog(@viewDidLoad: %@", c);
    [_widthContraint setConstant: [_widthContraint constant]+40];

    Mon Debugger me sort :


     



    $> viewDidLoad: (


        "<NSLayoutConstraint:0x600000092c50 'ConstraintForRatio' TestView:0x7fede4604130.width == 2.92969*TestView:0x7fede4604130.height   (active)>",

        "<NSLayoutConstraint:0x600000092cf0 'HeightConstraint' TestView:0x7fede4604130.height == 128   (active)>",

        "<NSLayoutConstraint:0x6000000929d0 'WidthConstraint' TestView:0x7fede4604130.width == 375   (active)>"

    )
    $> [LayoutConstraints] Unable to simultaneously satisfy constraints.

    Probably at least one of the constraints in the following list is one you don't want.

    Try this:

      (1) look at each constraint and try to figure out which you don't expect;

      (2) find the code that added the unwanted constraint or constraints and fix it.

    (

        "<NSLayoutConstraint:0x600000092c50 'ConstraintForRatio' TestView:0x7fede4604130.width == 2.92969*TestView:0x7fede4604130.height   (active)>",

        "<NSLayoutConstraint:0x600000092cf0 'HeightConstraint' TestView:0x7fede4604130.height == 128   (active)>",

        "<NSLayoutConstraint:0x6000000929d0 'WidthConstraint' TestView:0x7fede4604130.width == 415   (active)>"

    )


    Will attempt to recover by breaking constraint

    <NSLayoutConstraint:0x600000092c50 'ConstraintForRatio' TestView:0x7fede4604130.width == 2.92969*TestView:0x7fede4604130.height   (active)>


    Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.

    The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.


     



     


     


    L'identifier est bien "rajouté" à  -[NSLayoutConstraint description].


    Pratique pour débugger, parce que les po 0xObjectAddress (pour les View) et les Symbolic Exception BreakPoint constraint. 


     


    En tout cas, grand merci @Gercofis qui m'a fait découvrir ce p'tit truc.


  • C'est pratique, effectivement !




  • En tout cas, grand merci @Gercofis qui m'a fait découvrir ce p'tit truc.




    o:)   :p   :D   :D   <3 </p>

    :D  :D

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