我偶爾想改變一個NSView的維度programmaticaly。要做到這一點,獲取各種視圖的尺寸,相對於彼此進行調整,然後使用setFrame:來重新定位是很有幫助的。爲什麼NSView的框架方法返回錯誤的結果?
問題是,框架方法通常返回明顯錯誤的NSRects,從我的角度來看。
我有一個NSPanel在Interface Builder中建立的程序,以及到我的主程序的各種連接。爲了測試框架返回的NSRects,我在應用程序的awakeFromNib:方法中打開了面板,檢索了一些NSRects,並將它們打印到控制檯。
這是我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;
}
這段代碼的結果是這樣的控制檯:
in awakeFromNib
the frame is 0, 0, 0, 0
the frame is 0, 1079230464, 0, 1078329344
注意,(我)面板與兩個控件都顯示在屏幕上; (ii)我知道這樣一個事實,即網點連接正確,因爲我可以通過程序對事件進行控制並讓它們工作。 (iii)界面生成器在「尺寸&位置」下的檢查器中顯示正確的框架尺寸。
簡而言之,關於該程序的其他一切都是完美的。它實際上似乎沒有設置框架尺寸或其他東西。
有人可以告訴我如何檢索真實的幀信息?或者至少解釋我看到的結果?
男孩,是我的臉紅! 謝謝,凱洛阿。我覺得很愚蠢,但我很高興能夠把它放在我身後。 – Dennis 2009-07-14 19:48:24
沒問題。我將添加一個非常有用的宏。 – amattn 2009-07-14 19:51:13