2012-04-16 3 views
0

У меня возникли проблемы с изменением размера NSWindow в соответствии с NSView. Это должна быть логическая ошибка, поскольку она работает, но не для одного действия.NSWindow без изменения размера для NSView - ИНОГДА?

У меня есть один NSWindow, который пуст, и 3 NSViews с компонентами и разных размеров.

С помощью следующего кода я изменить размер NSWindow, чтобы соответствовать NSView и отобразить его:

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

Этот код работает отлично.

Однако в одном NSView у меня есть кнопка «Назад», и пока это отображает правильный NSView в NSWindow, он не изменяет его размер. В качестве примера начальное окно имеет определенный размер, я нажимаю, чтобы переключиться на другое представление, и оно правильно изменилось, я нажимаю кнопку «Назад», отображается 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]; 
} 

Заранее благодарен всем.

EDIT: мне кажется, что при получении VIEW.frame.size, если это многократно используется, оно теряет свои значения? Это кажется мне очень странным поведением?

ответ

3

Содержимое содержимого окна должно всегда иметь размер, чтобы заполнить область содержимого окна. Поэтому, когда вы устанавливаете размер содержимого окна, вы фактически изменяете размер текущего представления контента. Это происходит непосредственно перед переключением содержимого, поэтому вы меняете размер старого представления.

Попробуйте настроить представление контента на новый, одноразовый NSView перед изменением размера содержимого, а затем установить новое представление содержимого.

+0

Большое спасибо за ответ, но у меня возникли проблемы с пониманием того, что вы имеете в виду. У меня есть _mainView, _additionView и т. Д., Установленные как NSViews, как мне создать новый одноразовый NSView? Еще раз спасибо – Cristian

+0

'NSView * view = [[NSView alloc] initWithSize: someSize];' –

+0

, если я правильно понимаю ответ, я создаю новый NSView с размером по умолчанию, а затем измените представление на вид, который я хочу, а затем измените размер? – Cristian

Смежные вопросы