如何在旋转屏幕时调整UIViewController的框架大小?

时间:2011-07-08 14:06:19

标签: iphone ipad uiviewcontroller orientation

我正在开发基于iPad的程序。 我创建了新的模态UIViewController作为表单模式而不是全屏。 为了调整视图大小,我使用了以下代码。 ...

MyController* controller = [[MyController alloc] init];

controller.modalPresentationStyle = UIModalPresentationFormSheet;

[self presentModalViewController : controller animated: YES];

UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;

if ( UIInterfaceOrientationIsPortrait(orientation) )
    controller.view.superview.frame = CGRectMake(200, 100, 350, 600);
else
    controller.view.superview.frame = CGRectMake(100, 200, 600, 350);

...

在MyController中,我将以下编码视为didRotateFromInterfaceOrientation。

- (void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
    UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
    if ( fromInterfaceOrientation == orientation )
        return;
    if ( UIInterfaceOrientationIsPortrait(orientation) )
    {
        self.view.frame = CGRectMake(0, 0, 350, 600);
        self.view.superview.frame = CGRectMake(200, 100, 940, 628);
    }
    else
    {
        self.view.frame = CGRectMake(0, 0, 600, 350);
        self.view.superview.frame = CGRectMake(100, 200, 600, 350);
    }
}

但是在旋转屏幕时,视图不会调整大小,并且superview的宽度和高度具有意外值。 请帮我解决问题。

1 个答案:

答案 0 :(得分:0)

尝试调试它,看看你实际上有什么方向。

你有没有试过这个?

- (void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{

    if ( UIInterfaceOrientationIsPortrait(fromInterfaceOrientation) )
    {
        self.view.frame = CGRectMake(0, 0, 350, 600);
        self.view.superview.frame = CGRectMake(200, 100, 940, 628);
    }
    else
    {
        self.view.frame = CGRectMake(0, 0, 600, 350);
        self.view.superview.frame = CGRectMake(100, 200, 600, 350);
    }
}

另请注意,有两个portairt方向..