V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fujianjin6471
V2EX  ›  程序员

iOS 12.1 添加 tab bar 遇到的一个 bug

  •  
  •   fujianjin6471 · 2018-11-18 23:18:42 +08:00 · 2622 次点击
    这是一个创建于 2190 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我遇到了一个极其诡异的问题,iOS 12.1 之前都没有

    问题描述:对于一个内嵌于 UITabBarController 的 VC,在底部(和 tabBarController.tabBar 重叠的位置)添加 tab bar (含 item )时,所显示的 item 会往发生无法理解的移位,且无法点击,但打印显示 tab bar 的位置并无任何问题

    一些探索:

    1. iOS 12.1 之前绝无该问题
    2. 添加到 tab bar 位置往上一点(比如 49 point )也不存在该问题
    3. 添加 tab bar 时隐藏 tabBarController.tabBar 也可以避免 tab bar 移位,但点一下 second (模板中的另一个 tab )再回到 first,该问题又出现了

    复现方式:新建一个 Tabbed App,将 FirstViewController.swift 替换成这段代码即可:

    import UIKit
    
    class FirstViewController: UIViewController {
    
        var tabBar: UITabBar!
        var toggleButton: UIButton!
        
        override func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view, typically from a nib.
            setupTabbar()
            setupToggleButton()
        }
        
        func setupTabbar() {
            let frameOfDefaultTabbar = tabBarController!.tabBar.frame
            let tabbarFrame: CGRect
            tabbarFrame = CGRect(x: frameOfDefaultTabbar.origin.x, y: frameOfDefaultTabbar.origin.y, width: frameOfDefaultTabbar.width, height: frameOfDefaultTabbar.height)
            // 把上面一行换成下面一行,就能看到没有向左的偏移了
    //        tabbarFrame = CGRect(x: frameOfDefaultTabbar.origin.x, y: frameOfDefaultTabbar.origin.y - 49, width: frameOfDefaultTabbar.width, height: frameOfDefaultTabbar.height);print(tabbarFrame)
            tabBar = UITabBar(frame: tabbarFrame)
            tabBar.isHidden = true
            let newItem = UITabBarItem(title: "second", image: UIImage(named: "second"), selectedImage: nil)
            tabBar.items = [newItem]
            view.addSubview(tabBar)
     // 把这一行注释掉,所添加的 tab bar 就会被 tabBarController!.tabBar 完全覆盖,也就是没有偏移
    //        tabBarController?.tabBar.isHidden = true
        }
        
        func setupToggleButton() {
            toggleButton = UIButton(frame: CGRect(x: 100, y: 100, width: 100, height: 30))
            toggleButton.setTitle("切换 tabBar", for: .normal)
            toggleButton.setTitleColor(UIColor.black, for: .normal)
            toggleButton.addTarget(self, action: #selector(toggle), for: .touchUpInside)
            view.addSubview(toggleButton)
        }
        
        @objc func toggle() {
            tabBar.isHidden = !tabBar.isHidden
            tabBarController?.tabBar.isHidden = !(tabBarController?.tabBar.isHidden)!
        }
    }
    

    请问是否有朋友遇到过类似问题?

    7 条回复    2018-11-19 20:12:05 +08:00
    alfa
        1
    alfa  
       2018-11-18 23:29:39 +08:00 via iPhone
    tabBar.isTranslucent = false
    fujianjin6471
        2
    fujianjin6471  
    OP
       2018-11-19 00:07:21 +08:00
    @alfa 谢谢,我把这一行代码放在`tabBar = UITabBar(frame: tabbarFrame)`之后,但好像没起作用
    Cavolo
        3
    Cavolo  
       2018-11-19 00:20:05 +08:00 via iPhone
    把透明关了就行
    fujianjin6471
        4
    fujianjin6471  
    OP
       2018-11-19 00:34:56 +08:00 via iPhone
    @Cavolo 谢谢,请问你的意思和 1 楼的代码一样吗?我试过,不行啊。还是说,我理解错了?
    fujianjin6471
        6
    fujianjin6471  
    OP
       2018-11-19 14:20:32 +08:00
    @rannie 谢谢,的确就是这个问题,不过我还没搞定解决方案😂
    fujianjin6471
        7
    fujianjin6471  
    OP
       2018-11-19 20:12:05 +08:00
    @rannie 好像还不太一样,我这个并不涉及到 backgroundImage,isTranslucent 和 backgroundImage 都设置过,也没有效果☹️
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2635 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 05:00 · PVG 13:00 · LAX 21:00 · JFK 00:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.