Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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
Cocoa 添加子视图和自动调整大小_Cocoa_Interface Builder_Nsview_Nswindow_Autosize - Fatal编程技术网

Cocoa 添加子视图和自动调整大小

Cocoa 添加子视图和自动调整大小,cocoa,interface-builder,nsview,nswindow,autosize,Cocoa,Interface Builder,Nsview,Nswindow,Autosize,如何将视图添加到窗口中,以便调整视图大小以适应窗口框架? 问题 我正在制作一个包含两个视图的图纸窗口,一次只能看到其中一个视图, 因此,重要的是视图的大小与窗口的大小相同。我的问题是 view0适合正确,view1不适合,反之亦然。我不知道该怎么做 给他们和窗户一样大的尺寸 可能的解决办法 我可以在Interface Builder中确保两个视图的大小完全相同,然后它就可以工作了。然而,我正在寻找一种以编程方式实现这一点的方法 view0的屏幕截图 下面,您可以在顶部和右侧看到自动调整大小的问

如何将视图添加到窗口中,以便调整视图大小以适应窗口框架?

问题 我正在制作一个包含两个视图的图纸窗口,一次只能看到其中一个视图, 因此,重要的是视图的大小与窗口的大小相同。我的问题是 view0适合正确,view1不适合,反之亦然。我不知道该怎么做 给他们和窗户一样大的尺寸

可能的解决办法 我可以在Interface Builder中确保两个视图的大小完全相同,然后它就可以工作了。然而,我正在寻找一种以编程方式实现这一点的方法


view0的屏幕截图 下面,您可以在顶部和右侧看到自动调整大小的问题,在那里视图以某种方式被剪裁


(来源:)


view1的屏幕截图 此视图已正确调整大小


(来源:)


这是我的密码 在将视图添加到窗口之前,可以调整视图的大小。还是像我现在做的那样,在更改窗口框架时逐个添加视图更好。你是怎么做到的

NSView* view0 = /* a view made with IB */;
NSView* view1 = /* another view made with IB */;
NSWindow* window = [self window];

NSRect window_frame = [window frame];

NSView* cv = [[[NSView alloc] initWithFrame:window_frame] autorelease];
[window setContentView:cv];
[cv setAutoresizesSubviews:YES];

// add subview so it fits within the contentview frame
{
    NSView* v = view0;
    [v setHidden:YES];
    [v setAutoresizesSubviews:NO];
    [cv addSubview:v];
    [v setFrameOrigin:NSZeroPoint];
    [window setFrame:[v frame] display:NO];
    [v setAutoresizesSubviews:YES];
}

// add subview so it fits within the contentview frame
{
    NSView* v = view1;
    [v setHidden:YES];
    [v setAutoresizesSubviews:NO];
    [cv addSubview:v];
    [v setFrameOrigin:NSZeroPoint];
    [window setFrame:[v frame] display:NO];
    [v setAutoresizesSubviews:YES];
}

// restore original window frame
[window setFrame:window_frame display:YES];

[view0 setHidden:NO];
[view1 setHidden:YES];

解决了我这里有stackoverflow

如果这段代码可以缩短,那就太好了

NSView* view0 = /* a view made with IB */;
NSView* view1 = /* another view made with IB */;
NSWindow* window = [self window];

NSRect window_frame = [window frame];

NSView* cv = [[[NSView alloc] initWithFrame:window_frame] autorelease];
[window setContentView:cv];
[cv setAutoresizesSubviews:YES];

// add subview so it fits within the contentview frame
{
    NSView* v = view0;
    NSRect vframe = [v frame];
    [v setHidden:YES];
    [v setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];

    NSView* tmp_superview = [[[NSView alloc] initWithFrame:vframe] autorelease];
    [tmp_superview addSubview:v];
    [tmp_superview setAutoresizesSubviews:YES];
    [tmp_superview setFrame:window_frame];

    [v removeFromSuperview];
       [cv addSubview:v];
}

// add subview so it fits within the contentview frame
{
    NSView* v = view1;
    NSRect vframe = [v frame];
    [v setHidden:YES];
    [v setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];

    NSView* tmp_superview = [[[NSView alloc] initWithFrame:vframe] autorelease];
    [tmp_superview addSubview:v];
    [tmp_superview setAutoresizesSubviews:YES];
    [tmp_superview setFrame:window_frame];

    [v removeFromSuperview];
    [cv addSubview:v];
}

[view0 setHidden:NO];

窗口无法知道要自动调整哪个视图的大小。因此必须设置AutoresizezingMask

[view setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable]