title: iOS Hiding tab bar in iOS 6 creates black bar (fix for iOS 6 breaks iOS 7!)
body: <p>I've got a tabbed application and in one tab there is a <code>UIWebView</code>. When I rotate the device to landscape I've made the <code>UIWebView</code> full screen while hiding the status and tab bar.</p>
  
  <p>I've got it working in iOS 6 - originally when rotating and hiding the tab bar it would leave a black space where the tab bar was, so the <code>fHeight</code> code fixes this. However, on iOS 6 it worked perfectly, but now it actually creates the black bar problem iOS 6 was having!! Any ideas for a workaround to this?</p>
  
  <p>Please see my edit below this</p>
  
  <pre><code>- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration;
  {
      if(toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft || toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) {
          [self hideTabBar:self.tabBarController];
          [[UIApplication sharedApplication] setStatusBarHidden:TRUE withAnimation:UIStatusBarAnimationSlide];
      }
      else
      {
          [self showTabBar:self.tabBarController];
          [[UIApplication sharedApplication] setStatusBarHidden:FALSE withAnimation:UIStatusBarAnimationSlide];
      }
  }
  
  - (void) hideTabBar:(UITabBarController *) tabbarcontroller
  {
      CGRect screenRect = [[UIScreen mainScreen] bounds];
  
      [UIView beginAnimations:nil context:NULL];
      [UIView setAnimationDuration:0.5];
      float fHeight = screenRect.size.height;
      if(  UIDeviceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation) )
      {
          fHeight = screenRect.size.width;
      }
  
      for(UIView *view in self.tabBarController.view.subviews)
      {
          if([view isKindOfClass:[UITabBar class]])
          {
              [view setFrame:CGRectMake(view.frame.origin.x, fHeight, view.frame.size.width, view.frame.size.height)];
          }
          else
          {
              [view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width, fHeight)];
              view.backgroundColor = [UIColor blackColor];
          }
      }
      [UIView commitAnimations];
  }
  
  - (void) showTabBar:(UITabBarController *) tabbarcontroller
  {
      CGRect screenRect = [[UIScreen mainScreen] bounds];
      float fHeight = screenRect.size.height - 49.0;
  
      if(  UIDeviceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation) )
      {
          fHeight = screenRect.size.width - 49.0;
      }
  
      [UIView beginAnimations:nil context:NULL];
      [UIView setAnimationDuration:0.5];
      for(UIView *view in tabbarcontroller.view.subviews)
      {
          if([view isKindOfClass:[UITabBar class]])
          {
              [view setFrame:CGRectMake(view.frame.origin.x, fHeight, view.frame.size.width, view.frame.size.height)];
          }
          else
          {
              [view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width, fHeight)];
          }
      }
      [UIView commitAnimations];
  }
  </code></pre>
  
  <p>//Edit</p>
  
  <p>I've tried using this but I'm not sure how to pass in the view properly - I've tried <code>self.view</code> and webView and others but I can't get it to work on both iOS 6 and 7! Any kind of idea at all would be really helpful! Let me know if you need more info</p>
  
  <pre><code>- (void)setTabBarHidden:(BOOL)hidden view:(UIView *)view animated:(BOOL)animated
  {
      if (self.tabBar.hidden == hidden)
          return;
  
      CGRect screenRect = [[UIScreen mainScreen] bounds];
      float height = 0.0f;
  
      if(UIDeviceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation))
      {
          height = screenRect.size.width;
      }
      else
      {
          height = screenRect.size.height;
      }
  
      if (!hidden)
      {
          height -= CGRectGetHeight(self.tabBar.frame);
      }
  
      void (^workerBlock)() = ^() {
  
          self.tabBar.frame = CGRectMake(CGRectGetMinX(self.tabBar.frame), height, CGRectGetWidth(self.tabBar.frame), CGRectGetHeight(self.tabBar.frame));
          view.frame = CGRectMake(CGRectGetMinX(view.frame), CGRectGetMinY(view.frame), CGRectGetWidth(view.frame), height);
      };
  
      void (^completionBlock)(BOOL finished) = ^(BOOL finished) {
          self.tabBar.hidden = hidden;
      };
  
      if (animated)
      {
          [UIView animateWithDuration:0.25f animations:workerBlock completion:completionBlock];
      }
      else
      {
          workerBlock();
          completionBlock(YES);
      }
  }
  </code></pre>