2014-01-30 47 views
4
在IOS7

隱藏的TabBar顯示非正式行爲IOS 7隱藏的TabBar問題

當我使用

self.tabBarController.tabBar.hidden = YES; 

上面代碼中隱藏的TabBar,但是從底部我的觀點不會保持互動

但是,當我只是在推導向導viewController之前使用這個

someViewController.hidesBottomBarWhenPushed = YES 
[self.navigationController pushViewController:someViewController animated:YES]; 

它隱藏標籤欄以及底部視圖也是互動的。 但在這種情況下的問題是,當我們彈出viewController它顯示幾秒鐘之上的黑色酒吧就在tabbar上方。

回答

0

我認爲你們兩個人的問題都是由於沒有很好地定義/缺少autoresizingMask的或缺少自動佈局約束(無論你使用什麼)。

UITabBarController在隱藏標籤欄時的作用是拉伸它的view足以在屏幕外獲得其tabBar。您所包含的視圖控制器的視圖反過來應該適當地拉伸以使用新空間,否則您將獲得空白空間和/或非交互式區域。

編輯:

只是意識到隱藏標籤欄是不是在默認的SDK,但在category我很久以前作出。

無論如何拉伸UITabBarController的視圖框架在我看來是「隱藏」標籤欄的最優雅的方式(實際上將它從屏幕上移開),因爲您不必處理子視圖或搜索標籤欄直接框架。

0

試試這個,如果你想隱藏/顯示的角度的UITabBarController:

對於隱藏的TabBar

- (void)hideTabBar:(UITabBarController *) tabbarcontroller 
{ 
    for(UIView *view in tabbarcontroller.view.subviews) 
    { 
     if([view isKindOfClass:[UITabBar class]]) 
     { 
      [view setFrame:CGRectMake(view.frame.origin.x, 480, view.frame.size.width, view.frame.size.height)]; 
     } 
     else 
     { 
      [view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width, 480)]; 
     } 
    } 
    } 

顯示的TabBar

- (void)showTabBar:(UITabBarController *) tabbarcontroller 
    { 

     for(UIView *view in tabbarcontroller.view.subviews) 
     { 
      if([view isKindOfClass:[UITabBar class]]) 
      { 
       [view setFrame:CGRectMake(view.frame.origin.x, 431, view.frame.size.width, view.frame.size.height)]; 
      } 
      else 
      { 
       [view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width, 431)]; 
      } 
     } 
     } 

可能會有所幫助。

10

我希望你能得到解決方案。只是爲了確保,你嘗試

self.edgesForExtendedLayout = UIRectEdgeBottom; 
+1

這條命令拯救了我的生命。 –

-1

使用下面的代碼來解決問題

隱藏:

-(void)hideTabBar:(UITabBarController *)tabbarcontroller 
    { 
     CGRect screenRect = [[UIScreen mainScreen] bounds]; 

     float fHeight = screenRect.size.height; 
     if( UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation)) 
     { 
      fHeight = screenRect.size.width; 
     } 

     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)]; 
       view.backgroundColor = [UIColor blackColor]; 
      } 
     } 
    } 

顯示:

-(void)showTabBar:(UITabBarController *) tabbarcontroller 
{ 
    CGRect screenRect = [[UIScreen mainScreen] bounds]; 
    float fHeight = screenRect.size.height - 49.0; 

    if( UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation)) 
    { 
     fHeight = screenRect.size.width - 49.0; 
    } 
    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)]; 
     } 
    } 
} 

使用此方法在viewWil中l出現在設備旋轉方法根據您的要求

0

因此,我已經重寫了Objective-C中寫入Swift 3.0的一些答案,認爲它會工作。這裏的代碼:

func hideTabBar() { 
    let tabBarControllerView = self.tabBarController?.view 
    if let tabBarControllerSubviews = tabBarControllerView?.subviews { 
     for view in tabBarControllerSubviews { 
      if view is UITabBar { 
       view.frame = CGRect(
        x: view.frame.origin.x, 
        y: (UIScreen.main.bounds.size.height == 568 ? 568 : 480) + 20, 
        width: self.view.frame.size.width, 
        height: self.view.frame.size.height 
       ) 
      } else { 
       view.frame = CGRect(
        x: view.frame.origin.x, 
        y: view.frame.origin.y, 
        width: self.view.frame.size.width, 
        height: UIScreen.main.bounds.size.height == 568 ? 568 : 480 
       ) 
      } 
     } 
    } 
} 

func showTabBar() { 
    let tabBarControllerView = self.tabBarController?.view 
    if let tabBarControllerSubviews = tabBarControllerView?.subviews { 
     for view in tabBarControllerSubviews { 
      if view is UITabBar { 
       view.frame = CGRect(
        x: view.frame.origin.x, 
        y: (UIScreen.main.bounds.size.height == 568 ? 519 : 431), 
        width: self.view.frame.size.width, 
        height: self.view.frame.size.height 
       ) 
      } else { 
       view.frame = CGRect(
        x: view.frame.origin.x, 
        y: view.frame.origin.y, 
        width: self.view.frame.size.width, 
        height: UIScreen.main.bounds.size.height == 568 ? 519 : 431 
       ) 
      } 
     } 
    } 
}