Overview
画面遷移の度に hidesBottomBarWhenPushed = true
すると popToRootViewController()
した時にtabBarが戻らなくなりました。
iOS13では発生しなかったため、iOS14のバグと思われます。
※ Developer Forumsにも上がっていました
雑に再現コード
長いので折りたたみ
final class FirstViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
title = "First"
}
}
extension FirstViewController {
@IBAction func next(_ sender: Any?) {
guard let vc = storyboard?.instantiateViewController(identifier: "second") else { return }
vc.hidesBottomBarWhenPushed = true
navigationController?.pushViewController(vc, animated: true)
}
}
final class SecondViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
title = "Second"
}
}
extension SecondViewController {
@IBAction func next(_ sender: Any?) {
guard let vc = storyboard?.instantiateViewController(identifier: "last") else { return }
vc.hidesBottomBarWhenPushed = true
navigationController?.pushViewController(vc, animated: true)
}
}
final class LastViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
title = "Last"
}
}
extension LastViewController {
@IBAction func popToRoot(_ sender: Any?) {
navigationController?.popToRootViewController(animated: true)
}
}
対応策
↑のコードの場合であればSecondViewController
のvc.hidesBottomBarWhenPushed = true
を消してしまえばLastViewController
からのpopToRootViewController
でタブバーが戻ってくるようになります。
ただし、複雑な画面遷移だと思わぬ副作用が発生するリスクもあるので、バグ修正されるのを待った方がいいのかも😅