Objective c NSWindow未调整大小以适应NSView-有时?
我无法调整NSView窗口的大小以适应NSView。它必须是一个逻辑错误,因为它的工作,但不是一个行动 我有一个NSWindow是空的,还有3个NSView,其中包含不同大小的组件 使用以下代码,我调整NSView窗口的大小以适应NSView并显示它:Objective c NSWindow未调整大小以适应NSView-有时?,objective-c,xcode,cocoa,Objective C,Xcode,Cocoa,我无法调整NSView窗口的大小以适应NSView。它必须是一个逻辑错误,因为它的工作,但不是一个行动 我有一个NSWindow是空的,还有3个NSView,其中包含不同大小的组件 使用以下代码,我调整NSView窗口的大小以适应NSView并显示它: [_window setContentSize:_mainView.frame.size]; [_window setContentView:_mainView]; 这段代码运行良好 但是,在一个NSView中,我有一个后退按钮,虽然它在NSV
[_window setContentSize:_mainView.frame.size];
[_window setContentView:_mainView];
这段代码运行良好
但是,在一个NSView中,我有一个后退按钮,虽然它在NSView窗口中显示正确的NSView,但它不会重新调整其大小。例如,初始窗口具有一定的大小,我单击以切换到另一个视图,它会正确调整大小,我按“上一步”按钮,会显示NSView,但窗口的大小保持不变
有人能解释一下为什么当我切换回原来的NSView时,它不会调整NSView窗口的大小吗
提前谢谢大家。这是我拥有的完整代码:
- (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时,如果重复使用它,它会丢失其值吗?这对我来说似乎很奇怪?窗口的内容视图必须始终调整大小以填充窗口的内容区域。因此,设置窗口的内容大小时,可以有效地更改当前内容视图的大小。这发生在切换内容视图之前,因此您正在更改旧视图的大小
在更改内容大小之前,请尝试将内容视图设置为新的一次性NSView,然后再设置新的内容视图。窗口的内容视图必须始终调整大小以填充窗口的内容区域。因此,设置窗口的内容大小时,可以有效地更改当前内容视图的大小。这发生在切换内容视图之前,因此您正在更改旧视图的大小
在更改内容大小之前,请尝试将内容视图设置为新的、一次性的NSView,然后再设置新的内容视图。非常感谢您的回复,但我很难理解您的意思。我将_mainView、_additionView等设置为NSView,如何创建新的一次性NSView?再次感谢
NSView*view=[[NSView alloc]initWithSize:someSize]代码>如果我正确理解了答案,我将使用默认大小创建一个新的NSView,然后将该视图更改为我想要的视图,然后改变大小?@Cristian他的意思是改变setContentSize
和setContentView
调用的顺序。@如果我这样做,视图就根本不会调整大小。非常感谢您的回复,但我很难理解您的意思。我将_mainView、_additionView等设置为NSView,如何创建新的一次性NSView?再次感谢NSView*view=[[NSView alloc]initWithSize:someSize]
如果我正确理解了答案,我将创建一个默认大小的新NSView,然后将视图更改为我想要的视图,然后更改大小?@Cristian他的意思是更改setContentSize
和setContentView
调用的顺序。@如果我这样做,则视图的大小根本不会调整