Une question concernant NSSplitView

beltbelt Membre
17:36 modifié dans API AppKit #1
Voilà , j'ai une fenêtre qui comporte un NSSplitView comportant deux sous-vues (à  gauche, un NStableView et à  droite, un NSScrollView). Je voudrais que lors du redimensionnement de la fenêtre la largeur de la vue de gauche ne change pas. Peut-on faire ça avec IB ? Je n'y suis pas arrivé.
Sans IB, peut on esperer faire qq chose avec splitViewWillResizeSubviews: de NSSpliView ?
Merci par avance pour votre précieuse aide...

Réponses

  • Eddy58Eddy58 Membre
    17:36 modifié #2
    Est-ce que tu as essayé de régler l'auto-size sur ta vue de gauche, dans ton cas en ne mettant aucun ressort sur la ligne horizontale ? :o
  • beltbelt Membre
    17:36 modifié #3
    Les "ressorts" horizontaux de la vue de gauche sont bien désactivés. Par contre, ceux de la NSSplitView sont bien activés, car ma splitview doit occuper toute ma fenêtre.
    En fait, par défaut, NSSplitView augmente ou diminue les largeur et hauteur de toutes les sous-vues qui le constituent, et celà  de façon proportionnelle à  leur largeur/hauteur initiales. Par exemple, si NSSplitView comporte deux sous-vues de largeurs respectives 400 et 200 pixels et si la largeur totale de la fenêtre est multipliée par 1,5 lors d'un agrandissement, alors les nouvelles largeurs des sous-vues seront de 400 x 1,5 et 200 x 1,5 pixels.
    C'est ce comportement que j'aimerais modifier...
  • juillet 2005 modifié #4
    C'est tout à  fait le genre de chose qu'on confie en Cocoa à  un délégué. Donc ce n'est pas dans IB qu'il faut chercher, mais il faut un peu de code.

    Dans le délégué de ta splitview tu ajoutes le code suivant:
    [tt]- (float)splitView:(NSSplitView *)sender constrainSplitPosition:(float)proposedPosition ofSubviewAt:(int)offset {
    return 75.0;
    }

    - (void)splitViewDidResizeSubviews:(NSNotification *)aNotification {
    NSView* v = [[[aNotification object] subviews] objectAtIndex:0];
    NSRect r = [v frame];
    r.size.width = 75.0;
    [v setFrame:r];

    }[/tt]
  • mac_manumac_manu Membre
    17:36 modifié #5
    Juste une question. Tu dis qu'il faut mettre le code dans le delegate de la splitView; alors tu es obligé de la sous-classer?
  • 17:36 modifié #6
    Pourquoi?

    L'intérêt d'un delegate est justement de permettre d'éviter de sous-classer.
  • mac_manumac_manu Membre
    17:36 modifié #7
    Ok, ça joue si je redimentionne ma fenêtre automatiquement avec le btn vert. Par contre, si je déplace ma split avec la souris, pour élargir ma vue de gauche, il ne se passe plus rien. (ce qui est normal, puisque le delegate agit également avec un redimentionnent de la souris) Alors comment faire pour pouvoir malgré tout varier la dimention de la split avec la souris?
  • 17:36 modifié #8
    Tu fais des tests dans les méthodes de délégué, genre

    [tt]- (float)splitView:(NSSplitView *)sender constrainSplitPosition:(float)proposedPosition ofSubviewAt:(int)offset {
    if ([theSky isBlue]) return proposedPosition;
    return 75.0;   
    }[/tt]
  • schlumschlum Membre
    17:36 modifié #10
    Plus de 2 ans et demie, ça c'est du déterrage  :p
Connectez-vous ou Inscrivez-vous pour répondre.