我有一个简单的标签栏项目,我在标签栏上添加了一个图像,这看起来很好。
第二个视图是通过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
的视图上调用此方法。