Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSWindow未调整大小以适应NSView-有时?_Objective C_Xcode_Cocoa - Fatal编程技术网

Objective c NSWindow未调整大小以适应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

我无法调整NSView窗口的大小以适应NSView。它必须是一个逻辑错误,因为它的工作,但不是一个行动

我有一个NSWindow是空的,还有3个NSView,其中包含不同大小的组件

使用以下代码,我调整NSView窗口的大小以适应NSView并显示它:

[_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
调用的顺序。@如果我这样做,则视图的大小根本不会调整