2010-11-23 3 views
2

私はコードで作成したUIWebViewを持っていますが、initWithFrameを使用してスタートアップサイズを定義しています。デフォルトでは、デバイスを回転させると何も回転されず、向きは開始時と同じになります。UIWebViewでオリエンテーション/ローテーションのみを変更できるようにする

アプリケーションがUITabControllerに基づいており、コントローラのすべてのタブは、私はは全体のアプリが回転できるようにしたくないためUIWebViewsとそこに表示されていません。

私は2つの質問を得ました。

  • UIWebViewのコンテンツのみを回転できるようにすることはできますか?
  • 上記のことができない場合、どのように回転したときにTabBarを削除しますか(アプリケーションデリゲート?)、UIWebViewの内容を更新してウィンドウ全体に広げる必要がありますか?

答えて

3

風景モードで画像全画面を表示したいときに同様の問題が発生し、ポートレートモードのデフォルト位置になりました。私のアプリはTabBarControllerを含んでいたので、それぞれのタブにナビゲーションコントローラが表示されていましたので、イメージを含むビューに対して "willAnimateRotationToInterfaceOrientation"を使って自分自身の周りを移動しなければなりませんでした。

私のアプリでは、タブバーコントローラは、ポートレートを上下に変えて、すべての向きで表示されます。タブバーのコントローラーを一方向にロックすると、タブバー内のすべての後続のビューもロックされると思います。基本的には、ステータスバー、ナビゲーションバー、タブバー、ナビゲーションバーを表示外に、タブバーを表示外に、コンテンツのサイズを中間に隠しています。私はあなたのWebViewのサイズを変更することにより、それが自動的にせずに、適切内のコンテンツに合わせなければならないと考えている

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

float navBarHeight = self.navigationController.navigationBar.frame.size.height; 
float tabBarHeight = ((UITabBarController *)self.navigationController.parentViewController).tabBar.frame.size.height; 

if (interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight) 
{ 
    float statusBarHeight = [UIApplication sharedApplication].statusBarFrame.size.height; 
    [[UIApplication sharedApplication] setStatusBarHidden:YES]; 
    self.navigationController.navigationBar.hidden = YES; 
    ((UITabBarController *)self.navigationController.parentViewController).tabBar.hidden = YES; 

    // TabBarController adjustments 
    self.navigationController.parentViewController.view.bounds = CGRectMake(0, -tabBarHeight/2, 480, 320 + tabBarHeight); 

    // Adjust view 
    self.view.frame = CGRectMake(0, -statusBarHeight - navBarHeight, 480, 320); 

    // Adjust web view 
    self.WebView.frame = CGRectMake(26, 0, 426.6667, 320); 
} 

if (interfaceOrientation == UIInterfaceOrientationPortrait) 
{ 
    [[UIApplication sharedApplication] setStatusBarHidden:NO]; 
    float statusBarHeight = [UIApplication sharedApplication].statusBarFrame.size.height; 
    self.navigationController.navigationBar.hidden = NO; 
    ((UITabBarController *)self.navigationController.parentViewController).tabBar.hidden = NO; 

    // TabBarController adjustments 
    self.navigationController.parentViewController.view.bounds = CGRectMake(0, 0, 320, 480); 

    // NavigationController adjustments 
    self.navigationController.navigationBar.frame = CGRectMake(0, statusBarHeight, 320, navBarHeight); 

    // Adjust view 
    self.view.frame = CGRectMake(0, statusBarHeight + navBarHeight, 320, 480 - statusBarHeight - navBarHeight - tabBarHeight); 

    // Adjust web view 
    self.WebView.frame = CGRectMake(0, 0, 320, 240); 
} 
} 

:ここでは、self.WebViewを(それは例えば、私のイメージであったであろう)持っていると仮定すると、私がやったことの一例ですそれ自体「リフレッシュ」する。

+0

また、タブバーが選択されたタブに応じて条件付きで回転できるようにすることもできます。タブバーを横向きモードで非表示にすることがあるので、縦向きモードでない限り、別のタブに移動する方法はありません。選択したタブがwebViewを含むビューのものである場合にのみ回転を許可してください – leukosaima

+0

ありがとう、私は少しこれを試してみましょう! –

+0

私は各タブページにある各UIViewControllerに配置します。しかし、それでも下部のTab Barは削除されません。それが何か他のものになる可能性がある場合は、任意のアイデア?イベントが発生しているとそれはWebviewをrezises、それは間違った境界は、画面の外に移動し、タブバーがまだあるためです。 –

関連する問題