2011-04-06 11 views
0

私はテーブルビュー付きナビゲーションコントローラを持っています。セルの1つをクリックすると、ビューにuiwebviewが表示されます。あなたはYouTubeのページに移動します。uiwebview youtubeランドスケープで開始サムネイルは回転時にサイズ変更されません

あなたがポートレートのテーブルビューにいて、セルをクリックすると、youtubeページがポートレートで表示されます。ビデオサムネイルの向きを変更しても更新されません。したがって、サムネイルは小さくなります。これは問題ありません。私は実際にそれをより小さく好みます。 2行を消費するすべてのコンテンツは、1行を消費します。他の言葉では、他のすべてが新しい次元を調整します。

ランドスケープで始めると問題が発生します。向きの変更でサムネイルのサイズが変更されず、ポートレートモードに変更されるため、イメージは画面から消え、残りのコンテンツは正しく調整されます。

[webVIew refresh]; 

でも、明らかにページ全体が再度読み込まれます。したがって、接続に応じて、ちらつきが発生するか、サイトが完成したローディング(遅い接続の場合)まで白くなります。

また、iFrameにウェブサイトを読み込もうとしました。私は昨日似たような質問をしました。これは私が作成していたローカルページ用です。その質問に対する答えは、<meta name='viewport' content='width=device-width; initial-scale=1.0; maximum-scale=1.0;'>を先頭に入れたものでした。だから、私はiframeを行ってページを取得しようとしました。それはまずは​​馬鹿げたハックのように思えましたが、私はそこに行こうと思っていました。それはページをまったく読み込むことさえありません。私はyoutubeページが私はまだ他のページにリダイレクトしているので、推測する。さらに調査すると、スクロールなどのiframeに関するその他の問題があるように思えました。

だから私の質問はどのようにすることができます: A.も、B.は、それがポートレートモードでは、すべての時間をロードする次元でロードするサムネイルを取得する姿勢変更 OR 上/リロードのサイズを変更するだけで、サムネイルを取得しますそれがランドスケープで開始された場合。

あなたののUIViewControllerクラスでこのメソッドをオーバーライドして、そこにサイズ変更を行う必要があります

答えて

0

私は答えを見つけました。多分誰かがそれを説明したり、より良い解決策を提供したりできました。私はうまくいった追加のバグもありました。

  1. 私は、uiwebviewにファイル所有者に設定されたデリゲートがあることを確認しました。
  2. それからフォーム上にビューを押したとき、私は、親ビューを変更:

    [self.navigationController pushViewController:コントローラがアニメーション:YES]。

    [self.navigationController pushViewController:controller animated:YES]; 
    controller.webView.hidden = YES; 
    controller.webView.frame=CGRectMake(0, 0, 320,367); 
    

    3.On私はいつもやったとして、私は、URLをロードするのWebView:

(重要な部分320である、私は肖像画にビューを制限しています)

NSURL *url = [NSURL URLWithString:sUrl]; 
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url]; 
[webView loadRequest:requestObj]; 

4。私は今持っているwebviewdidfinishloadで:

if (self.interfaceOrientation == 
       UIInterfaceOrientationLandscapeLeft || 
       self.interfaceOrientation == 
       UIInterfaceOrientationLandscapeRight) { 
     self.webView.frame=CGRectMake(0, 0, 480,227); 

    } 
    self.webView.hidden = NO; 
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; 

このすべてが正常に私の問題を解決しているだろうが、その後私はユーチューブサービスから取得していますGDATAのURLが実際に第二のURLに解決されることを見つけました。その後、私はYouTubeの3番目のURLに転送されるので、彼らのURL形式を変更したと思います。これは、最後のURLがロードされる前にdidfinishloadコードが呼び出されていたことを意味します。これを解決するために私が追加:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { 
    if ([[[NSString stringWithFormat:@"%@",request.URL] substringWithRange:NSMakeRange(0, 26)] isEqualToString:@"http://m.youtube.com/watch"]) { 
     NSString *sUrl=[NSString stringWithFormat:@"%@",request.URL]; 
     sUrl = [sUrl stringByReplacingOccurrencesOfString:@"http://m.youtube.com/watch?" withString:@"http://m.youtube.com/#/watch?"]; 

     NSURL *url = [NSURL URLWithString:sUrl]; 

     NSURLRequest *requestObj = [NSURLRequest requestWithURL:url]; 

     [self.webView loadRequest:requestObj]; 
     return NO; 
    } 
    //NSLog(@"request:%@",request.URL); 
    return YES; 
} 

より良いかもしれないことを確認イムしかし、基本的に、私は2番目のURLを無視し、そして第三のURLに移動するために自分自身の変更を行うためにそれを伝えます。

0

  • (無効)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation時間:(NSTimeInterval)期間;
関連する問題