neo*_*eye 3 cocoa interface-builder autosize nsview nswindow
如何为窗口添加视图,以便调整视图大小以适应窗口框架?
我正在制作一个包含2个视图的工作表窗口,其中一次只能看到其中一个视图,因此视图与窗口大小相同非常重要.我的问题是view0正确匹配而view1没有,反之亦然.我无法弄清楚如何给它们与窗口相同的大小.
我可以确保两个视图在Interface Builder中具有完全相同的大小,然后它就可以工作了.但是,我正在寻找一种以编程方式执行此操作的方法.
下面您可以看到顶部和右侧的自动调整问题,其中视图以某种方式被剪切.

此视图已正确调整大小.

可以在将视图添加到窗口之前调整视图的大小.或者我现在做的更好,在改变窗口框架的同时逐个添加视图.你怎么做呢?
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];
Run Code Online (Sandbox Code Playgroud)
解决了!我在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];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14624 次 |
| 最近记录: |