2016-01-22 111 views
0

我有2 UIButton s,我放在我的TabBarViewController(也有嵌入的導航控制器)。UIButton在導航回父視圖時跳入標籤欄視圖控制器 - iOS

在最後一個ViewController(在導航控制器堆棧中),我必須隱藏標籤欄,並且我已經成功實現了這一點。

的問題是,當我瀏覽回parentViewController,該UIButton那張標籤欄的後面(見下面的GIF圖片):

紅色錄音鍵和紅色的「保存」按鈕是UIButton,和不tabBarButtons

GIF

這是我如何加入UIButtonstabBarViewController

self.button1 = [UIButton buttonWithType:UIButtonTypeCustom]; 
[self.button1 addTarget:self action:@selector(recordButtonClick:) forControlEvents:UIControlEventTouchUpInside]; 
self.button1.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleTopMargin; 
self.button1.frame = CGRectMake(0.0, 0.0, buttonImage.size.width, buttonImage.size.height); 
[self.button1 setBackgroundImage:[UIImage imageNamed:@"bar_button_record"] forState:UIControlStateNormal]; 


heightDifference = buttonImage.size.height - self.tabBar.frame.size.height; 
if (heightDifference < 0) 
    self.button1.center = self.tabBar.center; 
else 
{ 
    CGPoint center = self.tabBar.center; 
    center.y = center.y - heightDifference/2.0 - 0; 
    self.button1.center = center; 
} 

[self.view addSubview:self.button1]; 

另一個紅色的「保留」按鈕也添加了與上面類似的代碼。

我在去年 navigationViewController

現在,我用下面的代碼隱藏tabBar

#pragma mark - Overriden UIViewController methods, this function gets called automatically when viewController is loaded 
- (BOOL)hidesBottomBarWhenPushed { 
    return YES; 
} 

上述功能的恢復YES獸皮做的的TabBar,但它的那個那使按鈕去後面的TabBar上去以前的視圖控制器。 如果將其更改爲NO,則按鈕不會落後於tabBar,但tabBar也不會隱藏在最後的viewController上。

請建議以不同方式隱藏tabBar或將UIButton放在前面的方法。

謝謝!

回答

1

好了上面,找到了解決辦法!而不是躲在tabBar通過

- (BOOL)hidesBottomBarWhenPushed { 
    return YES; 
} 

隱藏在最後viewControllertabBar通過[tabBarController.tabBar setHidden:YES]。然後,當導航回去時,請在viewWillDisappear中執行[tabBarController.tabBar setHidden:NO];

這樣,subviews安排tabBarController入住同一:)

0

當視圖佈局時,您是否試圖將按鈕放在前面?

例如

self.view.bringSubviewToFront(self.button1) 

或者初始化它的TabBar

self.view.insertSubview(self.button1, aboveSubview: self.tabBar) 
+0

它不起作用 – hyd00

0

嘗試@Sha的答案,另外這是我做過什麼來運行它成功
確保在最後的ViewController

var tabbarViewController: tabbarViewController? 
var tabbarHoldonFrame = CGRect() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     // Do any additional setup after loading the view. 
     self.hideTabbar() 
    } 
    func hideTabbar() { 
     // get instance of tabbar controller 
     tabbarViewController = self.navigationController?.tabBarController as? tabbarViewController 
     // hide tabbar 
     tabbarViewController?.tabBar.isHidden = true 
     // hide your additional button placed above tabbar 
     tabbarViewController?.buttonCreateContest.isHidden = true 
     // hold it's frame in tabbarHoldonFrame, set zero temporarily 
     tabbarHoldonFrame = (tabbarViewController?.tabBar.frame)! 
     tabbarViewController?.tabBar.frame = CGRect.zero 
    } 
    override func viewWillDisappear(_ animated: Bool) { 
     self.showTabbar() 
    } 
    func showTabbar() { 
     // show it 
     tabbarViewController?.tabBar.isHidden = false 
     // show your button 
     tabbarViewController?.buttonCreateContest.isHidden = false 
     // add default frame 
     tabbarViewController?.tabBar.frame = tabbarHoldonFrame 
    } 
0

添加該代碼添加下面的方法在您的自定義的TabBar控制器解決您的自定義按鈕的問題去的TabBar後面。

Objective-C代碼:

-(void)viewDidLayoutSubviews { 
    if (self.centerButton != nil) { 
     [self.view bringSubviewToFront:self.centerButton]; 
     for (UIView *vw in self.view.subviews) { 
      if ([vw isKindOfClass:[UITabBar class]]){ 
       if(vw.hidden){ 
        self.centerButton.hidden = true; 
       } 
       else { 
        self.centerButton.hidden = false; 
       } 
      } 
     } 
    } 
} 

Swift代碼:

override func viewDidLayoutSubviews() { 
    if self.centerButton != nil { 
     self.view.bringSubview(toFront: self.centerButton) 

     for vw in self.view.subviews { 
      if let subView = vw as? UITabBar { 
       if subView.isHidden == true { 
        self.centerButton.isHidden = true 
       } else { 
        self.centerButton.isHidden = false 
       } 
      } 
     } 
    } 
} 

這只是一個有點慢,有大約0.5秒的時候從隱藏的看法發生變化,顯示或顯示的延遲隱藏。

+0

答案已經在1.5年前提供。如果您覺得有用,請註冊一下。謝謝。 – hyd00

相關問題