iOS中TabBar显示模式VC时切换TabItem的奇怪行为

版权声明:大熊猫猪·侯佩原创或翻译作品.谢绝转载! hopy https://blog.csdn.net/mydo/article/details/83006480

本猫App的UI层次大致如下:

  • TabBarVC
    • NavVC
      • 若干子VC
    • NavVC
      • 若干子VC
    • NavVC
      • 若干子VC
    • NavVC
      • 若干子VC
    • NavVC
      • 若干子VC

各个VC之间切换都很正常,但最近测试时偶然发现在VC0中的某个子VC里,调用present显示模态VC时,出现自动切换TabItem的行为:

第二次弹出VC后,TabBarVC当前显示的VC出现黑屏。

这个现象很怪异,简单搜了一下,基本没有人遇到同样的情况。所以可以排除iOS系统BUG的原因,应该是自己代码哪里有问题。

使用git回退到上一版本,发现无此问题!!!用git diff比较版本差异,发现如下方法有所区别:

override func viewWillLayoutSubviews() {
        super.viewWillLayoutSubviews()
        
        enterLayoutTimes += 1
        if enterLayoutTimes == 2{
            //需要将TabBar背景图片放到layout例程里来设置,在didLoad中不会有效
            self.tabBar.backgroundImage = UIImage(named: "background_dark")
            //2.第二次进入:然后再切换回第一个VC,这样做的目的是使得ESTabBarController中初始选择不会"僵住"
            self.selectedIndex = 0
            //3.递增enterLayoutTimes变量,使其大于2,可以开始自定义转场动画的显示了。
            enterLayoutTimes += 1
        }else{
            //1.第一次进入:需要首先选择TabBar的第二个VC
            self.selectedIndex = 1
        }
}

注意其中注释line 1,应该是will layout未准备充分时就切换了TabBarVC。

我们将第一次选择VC的时机放到will appear中:

override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
                
        self.selectedIndex = 1
    }

这样就解决了本博所述的问题。

有人可能奇怪,为毛要大费周章在TabBarVC初始化时反复切换VC?这是因为我使用了第三方的ESTabBarController类,该类在作为根VC时,如果不在初始化中做这样一个切换,则其在TabBar中Item的动画图标行为就会不正常。

that’s why! 😉

阅读更多

扫码向博主提问

大熊猫侯佩

博客专家

iOS以及ROR、Swift、ObjC
  • 擅长领域:
  • iOS开发
  • ROR开发
  • Swift
  • C及汇编语言
  • 框架设计
去开通我的Chat快问
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页