iOS Hiding tab bar in iOS 6 creates black bar (fix for iOS 6 breaks iOS 7!)

后端 未结 4 1965
南方客
南方客 2020-12-28 11:15

I\'ve got a tabbed application and in one tab there is a UIWebView. When I rotate the device to landscape I\'ve made the UIWebView full screen whil

相关标签:
4条回答
  • 2020-12-28 11:47

    OK guys, after struggling with this for about two hours, my colleague taught me the right way to do it. There is actually a very simple fix that I can't find online:

    just put :

            self.hidesBottomBarWhenPushed = YES;
    

    In the init method of your viewController and comment out the self.tabBar.hidden related code.

    0 讨论(0)
  • 2020-12-28 11:57

    I've created a a public Gist on Github for how we're doing this.

    This solution has gone through several iterations due to @Chris Byatt and our team trying it out. So, make sure you download the latest revision from there.

    The method signature has been simplified to

    - (void)setTabBarHidden:(BOOL)hidden animated:(BOOL)animated;
    

    You can call it like this within your UIViewController subclass:

    [self.tabBarController setTabBarHidden:YES animated:YES];
    
    0 讨论(0)
  • 2020-12-28 11:57

    I eventually got this working, but it took a while. It stemmed from a mixture of my original code and some of JRG-Developers work.

    - (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
    
        BOOL toLandscape = UIDeviceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation);
    
        CGRect screenRect = [[UIScreen mainScreen] bounds];
    
        void (^workerBlock)() = ^() {
    
    
            [[UIApplication sharedApplication] setStatusBarHidden:toLandscape withAnimation:UIStatusBarAnimationSlide];
    
            float height = toLandscape ? screenRect.size.width : screenRect.size.height - CGRectGetHeight(self.tabBarController.tabBar.frame);
    
            float width = toLandscape ? screenRect.size.height : screenRect.size.width;
    
            webView.frame = CGRectMake(CGRectGetMinX(webView.frame),
                                   CGRectGetMinY(webView.frame),
                                   width,
                                   height);
    
            [self moveTabBarToPosition:height];
        };
    
        [UIView animateWithDuration:0.25f animations:workerBlock];
    }
    //Moving the tab bar and its subviews offscreen so that top is at position y
    -(void)moveTabBarToPosition:(int)y {
        self.tabBarController.tabBar.frame = CGRectMake(self.tabBarController.tabBar.frame.origin.x, y, self.tabBarController.tabBar.frame.size.width, self.tabBarController.tabBar.frame.size.height);
    
        for(UIView *view in self.tabBarController.view.subviews) {
            if ([view isKindOfClass:[UITabBar class]]) {
                [view setFrame:CGRectMake(view.frame.origin.x, y, view.frame.size.width, view.frame.size.height)];
            } else {
                [view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width, y)];
                view.backgroundColor = [UIColor blackColor];
            }
        }
    }
    

    In my case this is for my webview but theoretically you can give it any view. Works in iOS 6 and 7

    0 讨论(0)
  • 2020-12-28 12:03
    -(void) hideBottomTabs{
    // Get the size of the main screen
    CGRect fullScreenRect = [[UIScreen mainScreen]bounds];
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0){
        UITabBar *bar = ((UITabBarController *)self.parentViewController).tabBarController.tabBar;
        fullScreenRect.size.height += ViewHeight(bar);
    }
    // Hide the tab bar
    ((UITabBarController *)self.parentViewController).tabBarController.tabBar.hidden = YES;
    // Resize and fill the screen
    [[((UITabBarController *)self.parentViewController).view.subviews objectAtIndex:0] setFrame:fullScreenRect];
    

    }

    I have solved my problem in a such way.

    0 讨论(0)
提交回复
热议问题