Je travaille sur une application dont la fenêtre principale a un NSDrawer. Il est crucial que le tiroir s'ouvre toujours sur le bord droit, et c'est ainsi que je l'ai codé pour fonctionner. Ce que je voudrais savoir, c'est s'il y a un moyen de détecter si le tiroir va s'ouvrir "hors de l'écran" ... Y at-il un moyen de le détecter? Si c'est le cas, comment? Et puis comment puis-je déplacer la fenêtre principale pour ajuster la largeur du tiroir qui va s'ouvrir?Comment détecter si NSDrawer va s'ouvrir
Merci d'avance.
Nick
EDIT:
Voici la solution grâce à la suggestion de Rob.
-(IBAction)toggleDrawer:(id)sender
{
NSRect screenFrame = [[[NSScreen screens] objectAtIndex:0] visibleFrame];
NSRect windowFrame = [window frame];
NSRect drawerFrame = [[[drawer contentView] window] frame];
if ([drawer state] == NSDrawerOpenState)
{
[drawer close];
}
else
{
if (windowFrame.size.width +
windowFrame.origin.x +
drawerFrame.size.width > screenFrame.size.width)
{
NSLog(@"Will Open Off Screen");
float offset = (windowFrame.size.width +
windowFrame.origin.x +
drawerFrame.size.width) - screenFrame.size.width;
NSRect newRect = NSMakeRect(windowFrame.origin.x - offset,
windowFrame.origin.y,
windowFrame.size.width,
windowFrame.size.height);
[window setFrame:newRect display:YES animate:YES];
}
[drawer openOnEdge:NSMaxXEdge];
}
}
Parfait. Je vous remercie. Pour toute personne intéressée, j'ai ajouté le code que j'ai utilisé pour la question. – nrj
Solution soignée, vous deux! Cela pourrait être une option pour soustraire le 'offset' dans' newRect' de la largeur au lieu de l'origine. –