Ich möchte gelegentlich die Dimensionen eines NSView programmatisch ändern. Um dies zu tun, ist es hilfreich, die Dimensionen verschiedener Ansichten zu erhalten, sie relativ zueinander anzupassen und dann setFrame: zu repositionieren.Warum gibt eine Frame-Methode eines NSView falsche Ergebnisse zurück?
Das Problem ist, dass die Rahmenmethode normalerweise NSRects zurückgibt, die aus meiner Sicht eindeutig falsch sind.
Ich habe ein Programm mit einem NSPanel in Interface Builder eingerichtet und verschiedene Verbindungen zu meinem Hauptprogramm. Um die NSRects, die von frame zurückgegeben wurden, zu testen, öffnete ich das Panel in der wakeFromNib: -Methode meiner Anwendung, holte einige NSRects heraus und druckte sie auf der Konsole aus.
Hier ist meine awakeFromNib:
- (void)awakeFromNib {
NSLog(@"in awakeFromNib");
[self showPrefsSheet:self]; //this is the prefs sheet with the controls of interest
//note that it does indeed pop up and is displayed
originalFrame = [aTextView frame];
NSLog(@"the frame is %d, %d, %d, %d", originalFrame.origin.x, originalFrame.origin.y, originalFrame.size.width, originalFrame.size.height);
originalFrame = [aButton frame];
NSLog(@"the frame is %d, %d, %d, %d", originalFrame.origin.x, originalFrame.origin.y, originalFrame.size.width, originalFrame.size.height);
return;
}
Die Ergebnisse dieser Code wie folgt aussehen in der Konsole:
in awakeFromNib
the frame is 0, 0, 0, 0
the frame is 0, 1079230464, 0, 1078329344
Beachten Sie, dass (i) die Platte und beide Steuerelemente auf dem Bildschirm angezeigt werden ; (ii) Ich weiß aus der Tatsache, dass die Steckdosen richtig verbunden sind, weil ich programmgesteuert Dinge mit den Kontrollen machen kann und sie funktionieren lassen kann; (iii) Der Interface Builder zeigt im Inspector unter "Size & Position" die korrekten Framegrößen an.
Kurz gesagt, alles andere über das Programm funktioniert perfekt. Es scheint tatsächlich, dass die Rahmenmaße nicht richtig oder so eingestellt sind.
Kann mir jemand sagen, wie man die echten Rahmeninformationen abruft? Oder zumindest die Ergebnisse erklären, die ich sehe?
Junge, ist mein Gesicht rot! Danke, Kailoa. Ich bin dumm, aber ich bin froh, dass ich das hinter mich bringen kann. – Dennis
kein Problem. Ich werde ein Makro hinzufügen, das auch sehr nützlich ist. – amattn