addSubview and autosizing
Posted
by neoneye
on Stack Overflow
See other posts from Stack Overflow
or by neoneye
Published on 2010-04-25T11:43:32Z
Indexed on
2010/04/25
11:53 UTC
Read the original article
Hit count: 424
How does one add views to a window, so that the views are resized to fit within the window frame?
The problem
I'm making a sheet window containing 2 views, where only one of them is visible at a time, so it's important that the views have the same size as the window. My problem is that either view0 fits correctly and view1 doesn't or the other way around. I can't figure out how to give them the same size as the window.
Possible solution
I could just make sure that both views have precisely the same size within Interface Builder, then it would work. However I'm looking for a way to do this programmatically.
Screenshot of view0
Below you can see the autoresizing problem in the top and the right side, where the view is somehow clipped.
Screenshot of view1
This view is resized correctly.
Here is my code
Can the views be resized before adding them to the window. Or is it better to do as I do now where the views are added one by one while changing the window frame. How do you do it?
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];
© Stack Overflow or respective owner