美文网首页
【iOS开发诡异问题】TabBar上添加一个View并自动布局,

【iOS开发诡异问题】TabBar上添加一个View并自动布局,

作者: 翻炒吧蛋滚饭 | 来源:发表于2019-07-05 17:51 被阅读0次

现象

  在之前的开发中遇到一个比较诡异的问题(对应业务:App中,TabBar显示未读小红点),在一个 UITabBarController -> UINavigationViewController -> UIViewController 的页面结构中,如果在 UITabBarController.tabBar 上添加了一个子View,并且子View或者子View中的子View采用了自动布局,当 UINavigationViewController.pushViewController 后,再在新Push出来的UIViewController中 popViewController(animated: false) ,注意这里不要Pop的动画,则返回到上一个页面的时候,前一个UIViewController的View,底部布局就会往上挪动一块。

页面结构

  页面结构如下:


页面结构

  Push到下一个页面后的效果:


页面结构
  Pop回上一个页面的效果:
问题页面

出现该问题的关键点

  1、TabBar上添加了子View,并且子View或者子View中的View使用了自动布局

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        
        let tabBarVC = self.window?.rootViewController! as! UITabBarController
        tabBarVC.tabBar.isTranslucent = false
        
        let redDotView: UIView = {
            let view = UIView()
            view.backgroundColor = .red
            view.layer.cornerRadius = 10
            return view
        }()
        
        // 在tabbar上添加view,并使用自动布局
        tabBarVC.tabBar.addSubview(redDotView)
//        redDotView.frame = CGRect(x: 100, y: 30, width: 20, height: 20)
        redDotView.snp.makeConstraints { make in
            make.left.equalTo(100)
            make.top.equalTo(30)
            make.height.width.equalTo(20)
        }
        
        return true
    }

  2、在新Push出来的页面进行Pop操作,并关闭动画

@IBAction func popAction(_ sender: Any) {
        self.navigationController?.popViewController(animated: false)
    }

如何避免该问题

  从以上两点出发:1、TabBar上的子View不使用自动布局;2、popViewController的时候开启动画。第二条比较难避免,毕竟某些业务还是要无动画Pop的。
  至于这个问题是什么原因导致的,暂不清楚系统内部做了什么操作。
  Demo:https://github.com/ZhaoheMHz/PushPopAndTabBar

相关文章

网友评论

      本文标题:【iOS开发诡异问题】TabBar上添加一个View并自动布局,

      本文链接:https://www.haomeiwen.com/subject/duoehctx.html