Probleme de positionnement dans une NSScrollView
Guillaume C
Membre
Bonjour,
J'ai un probleme avec une interface. J'ai mis un NSLabel dans une NSView (Layout | Embed Objects in | Custom View), que j'ai mise ensuite dans une NSScrollView. Le NSLabel doit rester en haut à gauche. La NSView est grande et ne se re-dimensionne pas. La NSScrollView se re-dimensionne avec la fenetre. J'ai normalement defini tout ca dans IB. Probleme: ca me marche pas. Le NSLabel ne veut pas rester en haut a gauche, mais en bas a gauche, c'est toujours la distance entre le NSLabel et le bas de la NSScrollView qui reste constante, alors que j'ai choisi le contraire dans IB. J'attache un ficher exemple. Je ne comprends pas pourquoi cela me marche pas alors que c'est sans doute si simple!
Merci pour votre aide!
Guillaume
J'ai un probleme avec une interface. J'ai mis un NSLabel dans une NSView (Layout | Embed Objects in | Custom View), que j'ai mise ensuite dans une NSScrollView. Le NSLabel doit rester en haut à gauche. La NSView est grande et ne se re-dimensionne pas. La NSScrollView se re-dimensionne avec la fenetre. J'ai normalement defini tout ca dans IB. Probleme: ca me marche pas. Le NSLabel ne veut pas rester en haut a gauche, mais en bas a gauche, c'est toujours la distance entre le NSLabel et le bas de la NSScrollView qui reste constante, alors que j'ai choisi le contraire dans IB. J'attache un ficher exemple. Je ne comprends pas pourquoi cela me marche pas alors que c'est sans doute si simple!
Merci pour votre aide!
Guillaume
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Chez moi il est bien en haut à gauche.
Attention, j'ai remarqué que sous xCode 3.2, IB ne sauvegarde pas automatiquement à chaque compilation ou simulation!
Ah bon. Bizarre. Mais meme quand tu agrandi completement la fenetre? Chez moi, il descend. Testé sur 10.5 et 10.6, avec le simulator ou avec une vraie app.
et Bienvenu sur le site !
Mais je ne comprends pas les explications
Le point (0, ymax), je suppose que c'est le point (0, 600) et dans l'exemple, c'est 600 vers le bas (parce que mon repere est celui en haut a gauche). Donc le point (0, ymax), c'est le coin en bas a gauche de la view. Est-ce que (deja) je comprends correctement cette etape?
Ensuite, quand j'agrandis la fenetre, ce point devient visible, mais je ne comprends pas pourquoi il est alors ancré en bas, et pas en haut, et ce meme quand je dis a ma view d'etre ancree en haut. Voir les copies d'ecran attachees.
"avant" c'est comme je veux
"apres" c'est pas bien, le label est descendu, et je suppose en fait que ce n'est pas le label tout seul, mais la view dans la scrollview qui est descendue.
"vue ancree" et je ne comprends pas pourquoi la view descend, parce qu'elle est ancree en haut
Et effectivement, une autre solution est de laisser la view se re-dimmensioner, mais dans ce cas, l'ascenseur ne disparait jamais, meme quand il n'y en a pas vraiment besoin. Il n'y a donc pas de solutions pour avoir une view qui reste ancree en haut quand la scrollview s'agrandi?
Merci pour toute cette aide!
Non en général, sur Mac, on prend le repère dans le sens classique. Sur ton écran, le point (0,0) est en bas à gauche , le point [0,ymax] est comme ymax l'indique en haut. C'est-à -dire que le repère est dans le bon sens, le sens que l'on utilise quand on fait des dessins à la main.
Bon ceci dit, on peut changer la règle pour une view et revenir à la règle du repère à l'envers (voir isFlipped), et sur iPhone, le repère est aussi inversé.
Autre particularité du graphisme sur Mac, les coordonnées sont des flottants, et non des entiers.
Oui,ancrée en haut, et l'ancre descend parce que la vue est trop petite
<blague> : il suffit de se déshabituer de penser que le haut est en bas et que le bas est en haut : c'est pas dur ) >/blague>
Si, si tu veux que cela se comporte à l'envers tu peux (redéfinir isFlipped) mais si tu plonges dans le monde Mac, fais les figures à l'endroit, c'est ce qui se fait sur plate-forme Mac ... (on fait dans l'autre sens sur plate-forme iPhone)
OK, c'etait mon probleme, parce que pour moi, une ancre ca ne bouge pas! Je vais voir ce que je peux faire avec isFlipped. Merci pour toutes ces explications!
Non, ca marche juste parce que la view fait 900 pixels, mais si elle en fait 600, quand on agrandi la fenetre, alors on voit que le meme probleme apparait. Mais je vais coder le isFlipped dans une vraie application et tester si cela marche.
Je sous-classe la view qui est dans la scrollview et je mets cette méthode:
Mais au final, je n'obtiens pas ce que je veux. J'ai l'impression que j'essaye de faire un truc qui n'a pas de sens
Il faudrait mieux dire que des lors que la taille du contenu de la scrollview est sur le point de devenir plus longue que la taille initiale de la view, alors cette view devient elastique (et prend toujours la taille du contenu de la scrollview). Cela devrait eviter d'avoir un scroller en permanence, alors qu'il n'y en a pas besoin. Est-ce que cela a plus de sens?
subclasser la NSView comme ca:
Et ensuite, ca marche!