2010-11-23 8 views
2

코드로 생성 한 UIWebView이 있고 시작 크기를 정의하는 데 initWithFrame을 사용하고 있습니다. 기본적으로 장치를 회전 할 때 아무 것도 회전하지 않으며 방향은 시작했을 때와 동일합니다.UIWebView에서만 오리엔테이션/회전 변경 허용

응용 프로그램은 내가 모든 응용 프로그램이 회전하는 것을 허용하지 않는 UIWebViews를 표시하고있다 에 대한되지 않은 UITabController 컨트롤러에있는 모든 탭을 기반으로합니다.

두 가지 질문이 있습니다.

  • UIWebView의 내용 만 회전하도록 허용 할 수 있습니까?
  • 위와 같이 할 수없는 경우 회전 할 때 TabBar를 어떻게 제거합니까 (응용 프로그램 대리인입니까?) UIWebView의 내용을 새로 고쳐 창 전체에 걸쳐 표시해야합니까?

답변

3

가로 모드로 이미지 전체 화면을 표시하려고했는데 세로 모드에서 기본 위치로 설정했을 때 비슷한 문제가 발생했습니다. 내 앱에는 네비게이션 컨트롤러를 표시하는 각 탭이있는 TabBarController가 포함되어 있기 때문에 이미지가 포함 된보기에 대해 "willAnimateRotationToInterfaceOrientation"을 사용하여 직접 주변을 이동해야했습니다.

내 응용 프로그램에서는 탭 바 컨트롤러가 세로 방향을 제외하고 모든 방향으로 표시됩니다. 탭 바 컨트롤러를 하나의 방향으로 잠그면, 탭 바 안의 모든 후속 뷰를 잠글 것입니다. 본질적으로 탐색 바를 보이지 않게 위로 이동하고 탭 바를 보이지 않게하고 중간에 내용의 크기를 조정하면서 상태 표시 줄, 탐색 모음 및 탭 표시 줄을 숨 깁니다. 하지 않고

나는 당신의 웹보기 크기를 조정하여 생각
- (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에 그 내용을 넣습니다. 하지만 여전히 하단의 탭 막대는 제거되지 않습니다. 다른 아이디어가 있다면 놓칠 수있는 아이디어가 있습니까? 이벤트가 해고되고 webview를 rezises, 그것은 틀린 경계 때문에 화면 밖으로 이동하고 tabbar 여전히 거기에있다. –