OSX-Anwendung: Wie wird das Fenster maximiert?

8

Ich arbeite an einer Mac-Anwendung, und ich möchte, dass das erste Fenster im maximierten Zustand ist, wie wenn du die grüne Taste mit dem Pluszeichen drückst. Ich will nicht, dass es Vollbild ist.

    
Rashid Mousavy Khoshrou 16.12.2015, 14:37
quelle

3 Antworten

5

Sie können ein Fenster auf den maximal verfügbaren Platz "zoomen", indem Sie NSScreens visibleFrame als Zielrahmen verwenden. Nehmen wir an, window ist Ihr NSWindow IBOutlet:

%Vor%

Zum Beispiel in AppDelegate.swift:

%Vor%     
Moritz 16.12.2015, 15:00
quelle
6

Eine App im gezoomten Zustand ist nicht dasselbe wie "maximiert". Das grüne Plus-Symbol zeigt Zoom an, was "die für diesen Inhalt geeignete Größe" bedeutet. In einigen Anwendungen ist das der sichtbare Rahmen (wie Eric D. diskutiert), aber es kann fast alles sein. Versuchen Sie beispielsweise, ein Safari-Fenster zu vergrößern.

Angenommen, Sie möchten wirklich "maximiert" und nicht "zoomen", dann ist Eric auf dem richtigen Weg, aber es kann besser gemacht werden. Zuerst sollten Sie den Bildschirm des Fensters verwenden, wenn es einen hat. Außerdem sollten Sie die Größenänderung des Fensters während des Starts nicht animieren (da dies beim Start peinlich aussehen kann).

%Vor%

Sie sollten in Erwägung ziehen, ein NSWindowController zu verwenden, um dies zu verwalten, anstatt es in den Anwendungsdelegaten zu legen. In diesem Fall können Sie dies in windowDidLoad setzen. Fenster-Controller sind ein ziemlich übliches Werkzeug in AppKit (im Gegensatz zu View-Controllern, die historisch nicht so üblich sind).

Wenn Sie eigentlich Zoom-Verhalten wünschen, machen Sie sich mit der NSWindowDelegate Methode windowWillUseStandardFrame(_:defaultFrame:) vertraut. Normalerweise sollten Sie zoom(_:) nicht direkt beim Start aufrufen, da dies animiert, aber die Logik, die Sie im Delegaten verwenden, sollte zur Berechnung Ihres Rahmens verwendet werden. Stellen Sie sicher, dass Sie Ihren Rahmen so anpassen, dass er auf dem Bildschirm des Fensters angezeigt wird, wenn er einen Bildschirm hat, anstatt auf dem Hauptbildschirm.

Im Idealfall sollten Sie das letzte Bild, das der Benutzer verwendet, wirklich beachten, anstatt es zum sichtbaren Bild zu zwingen. Das nennt man frameAutosave in Cocoa, wenn du das mehr erforschen willst. Ein Fenster-Controller hilft Ihnen, das etwas automatisch zu verwalten, wenn Sie einfach einen Namen für die automatische Speicherung im Interface Builder festlegen. (Obwohl es etwas kompliziert ist, den Frame beim ersten Start zu berechnen, um den sichtbaren Frame zu erhalten, wird er nicht vollständig automatisch sein.)

Denken Sie sorgfältig darüber nach, bevor Sie Ihren Standardrahmen auf jeden Fall zum sichtbaren Rahmen machen. Das kann auf großen Monitoren sehr groß sein (es gibt immer noch 30 "Cinema Displays, aber selbst auf einer 27" kann es ziemlich überwältigend sein). Manchmal ist das abhängig von Ihrer App, aber ich finde oft, dass es sich lohnt, eine maximale anfängliche Größe zu definieren (während der Benutzer es größer machen kann).

    
Rob Napier 16.12.2015 17:07
quelle
0

Hi Leute, ich schätze deine Hilfe sehr.

Ich arbeite an einer dokumentbasierten Mac-Anwendung. Ich habe den Code, den Sie in makeWindowControllers () der Klasse Document bereitgestellt haben, und es funktioniert wie ein Charme.

Vielen Dank. Hier ist der Code, den ich benutze.

%Vor%     
Rashid Mousavy Khoshrou 19.12.2015 15:32
quelle

Tags und Links