2012-04-16 65 views
0

我無法調整NSWindow的大小以適應NSView。它必須是邏輯錯誤,因爲它起作用,但不是一個行爲。NSWindow不調整大小以適應NSView - 有時候?

我有一個NSWindow是空的,3個NSViews的組件和大小不同。

用下面的代碼我調整NSWindow以適合的NSView並顯示:

[_window setContentSize:_mainView.frame.size]; 
[_window setContentView:_mainView]; 

此代碼工作正常。

但是,在一個NSView中,我有一個返回按鈕,雖然這在NSWindow中顯示正確的NSView,但不會重新調整它的大小。作爲一個例子,初始窗口是一定的大小,我點擊切換到另一個視圖,它調整大小正確,我按下後退按鈕,NSView顯示,但窗口保持相同的大小?

任何人都可以向我解釋爲什麼當我切換回原始的NSView,它不調整NSWindow?

在此先感謝大家。這是我有的完整代碼:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{ 
    [_window setContentSize:_mainView.frame.size]; 
    [_window setContentView:_mainView]; 
} 

- (IBAction)switchSubtractionView:(id)sender { 
    [_window setContentSize:_subtractionView.frame.size]; 
    [_window setContentView:_subtractionView]; 
} 

- (IBAction)switchAdditionView:(id)sender { 
    [_window setContentSize:_additionView.frame.size]; 
    [_window setContentView:_additionView]; 
} 

// ----------------------------------------------------------------------- 
// THE FOLLOWING METHOD DISPLAYS THE NEW VIEW CORRECTLY BUT DOESN'T RESIZE 
// ----------------------------------------------------------------------- 
- (IBAction)switchMainMenu:(id)sender { 
    [_window setContentSize:_mainView.frame.size]; 
    [_window setContentView:_mainView]; 
} 

在此先感謝大家。

編輯:在我看來,當獲取VIEW.frame.size,如果這是反覆使用,它會失去其價值?這對我來說似乎很奇怪?

回答

3

窗口內容視圖的大小必須始終設置爲填充窗口的內容區域。因此,當您設置窗口的內容大小時,可以有效更改當前內容視圖的大小。這發生在切換內容視圖之前,因此您正在更改舊視圖的大小。

嘗試在更改內容大小之前將內容視圖設置爲新的一次性NSView,然後設置新的內容視圖。

+0

非常感謝回覆,但我無法理解您的意思。我有_mainView,_additionView等設置爲NSViews,我如何創建一個新的一次性NSView?再次感謝 – Cristian 2012-04-17 13:29:37

+0

'NSView * view = [[NSView alloc] initWithSize:someSize];' – 2012-04-17 13:41:28

+0

如果我正確理解答案,我創建一個默認大小的新NSView,然後將視圖更改爲我想要的視圖,然後更改尺寸? – Cristian 2012-04-17 13:44:52