0

iPadアプリケーションで向きが変わったときに、.xibファイルに接続されたUINavigationBarとUITableViewのサイズを変更したいので、次のようにします。

- (void)viewWillAppear:(BOOL)animated {

UIInterfaceOrientation currentOrientation = [[UIApplication sharedApplication] statusBarOrientation];
if (UIInterfaceOrientationIsLandscape(currentOrientation)) {
    [self.seriesTable setFrame:CGRectMake(self.seriesTable.frame.origin.x, self.seriesTable.frame.origin.y, 425, self.seriesTable.frame.size.height)];
    [self.myNavBar setFrame:CGRectMake(self.myNavBar.frame.origin.x, self.myNavBar.frame.origin.y, 425, self.myNavBar.frame.size.height)];
} else {
    [self.seriesTable setFrame:CGRectMake(self.seriesTable.frame.origin.x, self.seriesTable.frame.origin.y, 670, self.seriesTable.frame.size.height)];
    [self.myNavBar setFrame:CGRectMake(self.myNavBar.frame.origin.x, self.myNavBar.frame.origin.y, 670, self.myNavBar.frame.size.height)];
}
}

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {

if (UIInterfaceOrientationIsLandscape(toInterfaceOrientation)) {
    NSLog(@"landscape");
    [self.seriesTable setFrame:CGRectMake(self.seriesTable.frame.origin.x, self.seriesTable.frame.origin.y, 425, self.seriesTable.frame.size.height)];
    [self.myNavBar setFrame:CGRectMake(self.myNavBar.frame.origin.x, self.myNavBar.frame.origin.y, 425, self.myNavBar.frame.size.height)];

} else {
    NSLog(@"portrait");
   //[self.view setFrame:CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y, 678, self.view.frame.size.height)];
    [self.seriesTable setFrame:CGRectMake(self.seriesTable.frame.origin.x, self.seriesTable.frame.origin.y, 670, self.seriesTable.frame.size.height)];
    [self.myNavBar setFrame:CGRectMake(self.myNavBar.frame.origin.x, self.myNavBar.frame.origin.y, 670, self.myNavBar.frame.size.height)];

}
}

アプリの開始時にフレームサイズは正しいですが、方向を変更すると、回転します..メソッドに移動しますが、フレームのサイズは変更されず、サイズを変更するには、別の UITabBar タブに切り替えてから、それに戻る必要がありますビューを表示し、明らかにviewwillappearメソッドを渡してビューのサイズを変更しますが、向きが変わっても何も起こらない場合、どうすればよいですか?

4

2 に答える 2

1

次のコードは、方向に基づいて Webview のサイズを変更するのに役立ちます

-(void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector (orientationchangefunction:) name:UIDeviceOrientationDidChangeNotification object:nil];
    [self orientationchngfn];

}



- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    if(interfaceOrientation == UIInterfaceOrientationPortrait) 
    {
        orientseason=0;
    }
    if(interfaceOrientation == UIInterfaceOrientationLandscapeLeft) 
    {
        orientseason=1;
    }
    if(interfaceOrientation == UIInterfaceOrientationLandscapeRight) 
    {
        orientseason=1;
    }
    if(interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) 
    {
        orientseason=0; 
    }
    if(orientseason==0)
    {   
    }
    else if(orientseason==1)
    {

    }

    return YES; 
}

-(void) orientationchangefunction:(NSNotification *) notificationobj
{

    [self performSelector:@selector(orientationchngfn) withObject:nil afterDelay:0.0];
}
-(void) orientationchngfn
{
    UIDeviceOrientation dorientation =[UIDevice currentDevice].orientation;

    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {

        if(UIDeviceOrientationIsPortrait(dorientation))

        {
            orientseason=0;
        } 
        else if (UIDeviceOrientationIsLandscape(dorientation))
        {
            orientseason=1;
        }
        if(orientseason==0)
        {
            webview4Html.frame=CGRectMake(5, 44, 310, 419);


        }
        else if(orientseason==1)
        {
            webview4Html.frame=CGRectMake(5, 44, 470, 276);

        }

    }
    else {
        if(UIDeviceOrientationIsPortrait(dorientation))

        {
            orientseason=0;
        } 
        else if (UIDeviceOrientationIsLandscape(dorientation))
        {

            orientseason=1;
        }
        if(orientseason==0)
        {
            webview4Html.frame=CGRectMake(5, 44, 758, 940);


        }
        else if(orientseason==1)
        {
            webview4Html.frame=CGRectMake(5, 44, 1014, 684);

        }
    } 

}
于 2012-08-01T12:47:03.503 に答える
0

サイズ変更がそれほど奇妙ではないと仮定すると、自動サイズ変更マスクを使用すると、これははるかに簡単になります

于 2012-08-01T12:54:01.607 に答える