0

画面の右側の大部分のみをカバーする UIWebView があります。これを行うには、frame プロパティを使用して縦向きのフレーム サイズと位置を指定します。 webView.frame=CGRectMake(220,100,548,875);

デバイスを横向きに回転させると、横向きの新しいフレームを指定します。 webView.frame=CGRectMake(300,73,724,638);

問題は、webView を縦向きから横向き、そし​​て再び縦向きに回転させて、フレームを元のフレームに変更したときに、幅が以前の半分になったことです。

フレームのサイズを変更するために呼び出される私のコードと関数は次のとおりです。

-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
    if(toInterfaceOrientation==UIInterfaceOrientationPortraitUpsideDown)
    {
    }
    else if(self.interfaceOrientation==UIInterfaceOrientationPortrait)
    {
        [self showLandscape];
    }
    else if(toInterfaceOrientation==UIInterfaceOrientationPortrait)
    {
        [self showPortrait];
    }
}

-(void)showLandscape
{
.
.
.
webView.frame=CGRectMake(300,73,724,638);
.
.
.
}

-(void)showPortrait
{
.
.
.
webView.frame=CGRectMake(220,100,548,875);
.
.
.
}

この問題を解決するには?

4

1 に答える 1

1

これは私がやったことです、それはうまくいっています

- (void)viewDidLoad {
    UIWebView *_webView = [[UIWebView alloc] init];
    // when I add these line it is also working well (!!!) on my device
    //_webView.autoresizingMask=UIViewAutoresizingFlexibleWidth;
    //_webView.autoresizesSubviews=YES;
    //_webView.contentMode=UIViewContentModeScaleAspectFit; 
    [self.view addSubview:_webView];
    [_webView setFrame:CGRectMake(220.f, 100.f, 548.f, 875.f)];
}

また、次のコードも追加しました。

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    for (UIView *_temporaryView in self.view.subviews) {
        if ([_temporaryView isKindOfClass:[UIWebView class]]) {
            if (UIInterfaceOrientationIsPortrait(interfaceOrientation)){
                [_temporaryView setFrame:CGRectMake(220.f, 100.f, 548.f, 875.f)];
            } else {
                [_temporaryView setFrame:CGRectMake(300.f, 73.f, 724.f, 638.f)];
            }
        }
    }

    return true;
}

異常を見つけるためにコードフラグメントを提供したくない場合は、コードと比較して違いを見つけてください。

于 2012-07-25T09:59:25.513 に答える