在UITabBar上添加子视图,当vc弹出时显示在标签栏下



我有一个简单的标签栏项目,我在标签栏上添加了一个图像,这看起来很好。

第二个视图是通过hidesbottombarwhenpushing = true从FirstViewController推送的。然后,我隐藏了添加的按钮,有充分的理由,在视图上,而不是标签栏作为子视图。

一切正常,直到我按下后退按钮,当我取消隐藏视图(或重新创建它)显示在标签栏下。

在什么方法我应该把showButton()方法,所以它显示在标签栏再次?

提示吗?

CustomTabBarController.swift

class CustomTabBarController: UITabBarController {
    var bigButton: UIImageView!
    func addCenterButton() {
      let image = UIImage(named: "bigButtonBackground")
      bigButton = UIImageView(image: image)
      bigButton.frame = CGRectMake(0.0, 0.0, image!.size.width, image!.size.height);
      bigButton.autoresizingMask = .FlexibleRightMargin | .FlexibleLeftMargin | .FlexibleBottomMargin | .FlexibleTopMargin
      let heightDifference = image!.size.height - tabBar.frame.size.height
      var center = tabBar.center
      center.y = center.y - heightDifference/2.0
      bigButton.center = center
      view.addSubview(bigButton)   
     }
     func hideButton() {
       bigButton.hidden = true   
     }
     func showButton() {
       bigButton.hidden = false
       view.bringSubviewToFront(bigButton)  
     }
}

FirstViewController.swift

class FirstViewController: UIViewController {
  override func viewDidLoad() {
    super.viewDidLoad()
    (tabBarController as! CustomTabBarController).addCenterButton()
  }
  override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)
    (tabBarController as! CustomTabBarController).showButton()
  }
  override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    let viewController = segue.destinationViewController as! UIViewController
    (tabBarController as! CustomTabBarController).hideButton()
    viewController.hidesBottomBarWhenPushed = true
  }
}

我正在处理类似的情况,最终子类化了UITabBarController。在子类的viewDidLayoutSubviews方法中,调用bringSubviewToFront(view: UIView)并在标签栏后面的视图中传递解决了这个问题。请确保在UITabBarController的视图上调用此方法。

最新更新