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: 405

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.

view0


Screenshot of view1

This view is resized correctly.

view1


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

Related posts about cocoa

Related posts about nswindow