2016-01-22 117 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

相关问题