addSubview und die automatische Skalierung der Seiten

Wie macht man das hinzufügen von Ansichten, um ein Fenster, so dass die sichten geändert werden, um zu passen innerhalb des Fensterrahmens?

Das problem

Mache ich ein sheet Fenster mit 2 Ansichten, wobei nur einer von Ihnen ist sichtbar in einer Zeit,
so ist es wichtig, dass die Ansichten haben die gleiche Größe wie das Fenster. Mein problem ist, dass entweder
view0 richtig passt und view1 nicht, oder anders herum. Ich kann nicht herausfinden, wie
geben Sie die gleiche Größe wie das Fenster.

Mögliche Lösung

Konnte ich nur stellen Sie sicher, dass beide Ansichten haben genau die gleiche Größe in Interface Builder, dann würde es auch funktionieren. Aber ich bin auf der Suche nach einem Weg, um dies programmatisch tun.


Screenshot von view0

Unten sehen Sie die autoresizing problem in der oberen und der rechten Seite, wo die Aussicht ist irgendwie abgeschnitten.

addSubview und die automatische Skalierung der Seiten


Screenshot von view1

Diese Ansicht ist richtig angepasst wird.

addSubview und die automatische Skalierung der Seiten


Hier ist mein code

Können die Ansichten in der Größe verändert werden, bevor Sie Sie hinzufügen, um das Fenster. Oder ist es besser, zu tun, was ich tun, jetzt, wo die Ansichten Hinzugefügt werden, eins nach dem anderen, während Sie die Fenster-Rahmen. Wie machst du es?

NSView* view0 = /* a view made with IB */;
NSView* view1 = /* another view made with IB */;
NSWindow* window = [self window];

NSRect window_frame = [window frame];

NSView* cv = [[[NSView alloc] initWithFrame:window_frame] autorelease];
[window setContentView:cv];
[cv setAutoresizesSubviews:YES];

//add subview so it fits within the contentview frame
{
    NSView* v = view0;
    [v setHidden:YES];
    [v setAutoresizesSubviews:NO];
    [cv addSubview:v];
    [v setFrameOrigin:NSZeroPoint];
    [window setFrame:[v frame] display:NO];
    [v setAutoresizesSubviews:YES];
}

//add subview so it fits within the contentview frame
{
    NSView* v = view1;
    [v setHidden:YES];
    [v setAutoresizesSubviews:NO];
    [cv addSubview:v];
    [v setFrameOrigin:NSZeroPoint];
    [window setFrame:[v frame] display:NO];
    [v setAutoresizesSubviews:YES];
}

//restore original window frame
[window setFrame:window_frame display:YES];

[view0 setHidden:NO];
[view1 setHidden:YES];

InformationsquelleAutor neoneye | 2010-04-25

Schreibe einen Kommentar