Frage

Ich muss verstehen, wie NSView es Ansichten autoresizes. Ich habe in IB alles eingerichtet und meine Subviews der Größe schön (wenn ich meine Fenster mit einer Maus der Größe um). Allerdings, wenn ich [myMainView setFrame:] mit meinem neuen Rahmen rect tun, passiert nichts. Alle meine Unter Ansichten sind immer noch die Originalgröße (auch wenn die Hauptansicht die richtigen Maße hat). Kinder resizeWithOldSuperviewSize: wird genannt, aber es ist noch nicht geeignete Größe.

Ich habe einen Bildschirm voll von Kakao Elementen auf dem Bildschirm (Bildschirm # 1), Etikett, Bild, Video. Es gibt eine gut definierte Layout für diese Elemente. Ich habe Setup der automatische Verhalten über Interface Builder, die sehr gut funktioniert. Ändern der Größe des Hauptfensters ändert die Größe der Elemente in einer befriedigenden Weise.

Nun klickt der Benutzer auf die Schaltfläche „Weiter“, woraufhin eine zweite screen von Elementen (Bildschirm # 2) gezeichnet werden soll. Meine Layouts basieren auf einer kanonischen Bildschirmgröße gebaut (sagen wir, 800x600). Aber jetzt ist das Fenster größer (oder kleiner), weil es in Bildschirm # 1 die Größe verändert wurde. So werden die Elemente jetzt nur einen kleinen Bereich im Fenster nehmen, anstatt entsprechend der so bemessen ist, um den verfügbaren Raum zu füllen. Ich möchte diese Elemente skalieren.

Bin ich Missverständnis, wie funktioniert der automatischen Größen? Wie kann ich die Autoresize Maschinen unter NSView manuell auslösen?

Es gibt zwei Dinge, die ich tun kann:

  1. die Größe manuell die Elemente basierend auf der aktuellen Bildschirmgröße relativ zu Originalgröße. Diese Option ist nicht mein Favorit, weil scheinbar, ich den Code neu zu schreiben gezwungen, der bereits in NSView (das Verhalten der automatischen Arbeits
  2. Meine zweite Option ist die bereits erwähnte NSView der automatischen Größen Magie aufzurufen. Dokumentation impliziert, dass [NSView SetFrame:] wird für mich das tun. Was ich habe versucht, meine Inhalte im Hinblick auf die ursprüngliche Bildschirmgröße (800x600) die Größe, meine Elemente machen und sie dann an die aktuelle Fenstergröße ändern. Konzeptionell ist es nicht identisch mit manuell die Größe des Fensters? Es scheint nicht zu sein. Auch diese Option ist vorzuziehen, da es die Menge an Code minimiert, die te geschrieben hat und gewartet werden.
War es hilfreich?

Lösung 2

Es stellte sich heraus mein Ansatz richtig ist. Ich war die Einstellung der Bildgröße auf einen falschen Wert, also war ich nicht das erwartete Verhalten zu bekommen. Doh.

Andere Tipps

Dieser Code

NSView* superView = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, 100, 100)];
NSView* subView   = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, 100, 100)];
[superView addSubview:subView];

[superView setAutoresizesSubviews:YES];
[subView setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];

NSLog(@"subview's frame before resizing: %@", NSStringFromRect([subView frame]));
[superView setFrame:NSMakeRect(0, 0, 200, 100)];
NSLog(@"subview's frame after  resizing: %@", NSStringFromRect([subView frame]));

nicht geben, das erwartete Ergebnis:

[...] subview's frame before resizing: {{0, 0}, {100, 100}}
[...] subview's frame after  resizing: {{0, 0}, {200, 100}}

Ihr Problem ist anderswo. Ich gehe davon aus, dass einer Ihrer Container Ansichten ist kein Teil der Ansicht Hierarchie des Fensters zu dem Zeitpunkt, wenn die Größe ändern auftritt.

Eine gute Lösung für Ihr Problem könnte die Verwendung ein NSTabView ohne Reiter sein, denn dann werden alle Ihre Ansichten jederzeit im Fenster sind (möglicherweise versteckt) und der TabView kümmert sich um die Größe neu bestimmen.

Eine andere Lösung ist mehrere Ansichten auf der jeweils anderen und verwenden setHidden: setzen um zu zeigen, nur einen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top