Leo
Leo

Reputation: 1567

UIToolBar and iPhone Interface Orientation Issue

I am developing an application in iPhone. One view support orientation in portrait and landscape. I have two separate views for both orientation. This view has a UIToolbar at the top.

Problem is when I change view back from landscape to portrait, UIToolbar at the top disappears. I want the toolbar to come back in its original position when it is rotated back to portrait.

This is what I am doing in my program:

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)
interfaceOrientation duration:(NSTimeInterval)duration {    
    if (interfaceOrientation == UIInterfaceOrientationPortrait)
    {
        self.view = self.portrait;
        self.view.transform = CGAffineTransformIdentity;
        self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(0));
        self.view.bounds = CGRectMake(0.0, 0.0, 300.0, 480.0);  
    }
    else if (interfaceOrientation == UIInterfaceOrientationLandscapeLeft)
    {
        self.view = self.landscape;
        self.view.transform = CGAffineTransformIdentity;
        self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(-90));
        self.view.bounds = CGRectMake(0.0, 0.0, 460.0, 320.0);
    }
    else if (interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown)
    {
        self.view = self.portrait;
        self.view.transform = CGAffineTransformIdentity;
        self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(180));
        self.view.bounds = CGRectMake(0.0, 0.0, 300.0, 480.0);
    }
    else if (interfaceOrientation == UIInterfaceOrientationLandscapeRight)
    {
        self.view = self.landscape;
        self.view.transform = CGAffineTransformIdentity;
        self.view.transform = 
        CGAffineTransformMakeRotation(degreesToRadian(90));
        self.view.bounds = CGRectMake(0.0, 0.0, 460.0, 320.0);
    }
}

I don't know what am I missing here? Any help would be really appreciated.

Upvotes: 2

Views: 4193

Answers (3)

Abhinav Gujjar
Abhinav Gujjar

Reputation: 2620

In interface builder, select the toolbar, hit command-3; this brings up the ruler / alignment control menu.

Under the Autsizing section, by default the toolbar is only coupled with left-right and center. Not to the TOP. Select the "I" at the top. now the tool bar is docked relative to the top of the view and will not get pushed off during rotation.

I'm sure there is a code equivalent for this as well

Upvotes: 2

Roshan Amadoru
Roshan Amadoru

Reputation: 365

self.view.bounds = CGRectMake(0.0, 0.0, 300.0, 480.0);  

The problem here is that you are making the heigh 480. But it should be 460. So you are currently having 20px more on the height, which may be sending the toopbar somewhat off the screen.

Upvotes: 1

Morion
Morion

Reputation: 10860

if you want just to make your view rotatable, is is enough to implement

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation{
    return YES;
}

in your viewCountroller class

Upvotes: 1

Related Questions