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