开发者

UIImage/UIView Doesn't Adjust Properly To UIInterfaceLandscape Views

开发者 https://www.devze.com 2023-04-11 02:42 出处:网络
I am writing an app that I would like to only be viewed in Landscape Mode. I have set it up so that if the iPhone is held in Portrait Mode, nothing happens and the current image remains in Landscape M

I am writing an app that I would like to only be viewed in Landscape Mode. I have set it up so that if the iPhone is held in Portrait Mode, nothing happens and the current image remains in Landscape Mode. The iPhone Simulator starts out in Landscape Mode with the Home Button on the right. If the iPhone is rotated from one Landscape Mode to the other, animation then occurs and the view is adjusted. However, whenever the device is in Landscape Mode with the Home Button on the left, the image is 20 pixels higher than needed, revealing a white line at the bottom of the screen.

In spite of all attempts to logically adjust this such as

self.view.frame = CGRectMake (0,20, self.view.frame.size.width, self.view.frame.size.height)

it doesn't fix the problem. I am accounting for the Status Bar in my calculations.

The .xib file contains an UIImageView on top of a UIView. This is my first experience implementing these methods so I apologize if the solution is relatively easy. Below is the code for the two methods used to implement the Landscape Mode views.

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {

    //set up interface to only be viewed in Landscape

    if(inter开发者_开发问答faceOrientation == UIInterfaceOrientationLandscapeLeft)
        return interfaceOrientation;
    else if(interfaceOrientation == UIInterfaceOrientationLandscapeRight)
        return interfaceOrientation;
    else
        return NO;
}

-(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)tointerfaceOrientation duration:(NSTimeInterval)duration {

    if(UIInterfaceOrientationLandscapeRight){ 
        self.view.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height); 
    }
    else if (UIInterfaceOrientationLandscapeLeft) { 

         //shouldn't adjustment to 20 fix the view?
        self.view.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
    }
    else return;
}


For UIViews to adjust the subviews properly you will have to take a look at this UIView property: autoresizingMask, and set the mask to autoresize what is needed, if that does not work you will have to override:

- (void)layoutSubviews

From the reference: UIView reference

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号