如何将视图添加到窗口中,以便调整视图大小以适应窗口框架?
问题
我正在制作一个包含两个视图的工作表窗口,一次只能看到其中一个视图,
因此,视图的大小必须与窗口的大小相同。我的问题是
VIEW0适合,VIEW1不适合,或者相反。我不知道该怎么做
为它们提供与窗口相同的大小。
可能的解决方案
我可以确保两个视图在接口生成器中的大小完全相同,然后它就可以工作了。不过,我正在寻找一种以编程方式完成这项工作的方法。
视图0的屏幕截图
在下面,您可以看到顶部和右侧的自动调整问题,其中视图以某种方式被剪裁。
视图1的屏幕截图
此视图的大小已正确调整。
这是我的密码
在将视图添加到窗口之前,是否可以调整视图的大小。或者像我现在做的那样,在更改窗口框架的同时逐个添加视图更好。你是怎么做到的?
nsview*view0=/*a view made with ib*/;
nsview*view1=/*使用ib创建的另一个视图*/;
nswindow*window=[自窗口];
nsret window_frame=[窗口框架];
nsview*cv=[[[nsview alloc]initwithframe:window_frame]autorelease];
[窗口setContentView:cv];
[cv setautoresizesubview:是];
//添加子视图,使其适合ContentView框架
{
nsview*v=view0;
[v sethidden:是];
[v setautoresizesubviews:否];
[cv addsubview:v];
[v setframeorigin:nszeropoint];
[窗口设置帧:[V帧]显示:否];
[v setautoresizesubviews:是];
}
//添加子视图,使其适合ContentView框架
{
nsview*v=view1;
[v sethidden:是];
[v setautoresizesubviews:否];
[cv addsubview:v];
[v setframeorigin:nszeropoint];
[窗口设置帧:[V帧]显示:否];
[v setautoresizesubviews:是];
}
//还原原始窗口框架
[窗口设置帧:窗口显示:是];
[视图0设置隐藏:否];
[视图1设置隐藏:是];
< /代码> <在窗框里?
问题
我正在制作一个包含两个视图的工作表窗口,一次只能看到其中一个视图,
因此,视图的大小必须与窗口的大小相同。我的问题是
VIEW0适合,VIEW1不适合,或者相反。我不知道该怎么做
给他们和窗户一样的尺寸。
可能的解决方案
我可以确保两个视图在接口生成器中的大小完全相同,然后它就可以工作了。不过,我正在寻找一种以编程方式实现这一点的方法。
视图0的屏幕截图
在下面,您可以看到顶部和右侧的自动调整问题,其中视图被某种方式剪裁。

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

这是我的密码
在将视图添加到窗口之前,是否可以调整视图的大小。或者像我现在做的那样,在更改窗口框架的同时逐个添加视图更好。你是怎么做到的?
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];