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

2018-11-18 23:18:42 +08:00
 fujianjin6471

我遇到了一个极其诡异的问题,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)!
    }
}

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

2631 次点击
所在节点    程序员
7 条回复
alfa
2018-11-18 23:29:39 +08:00
tabBar.isTranslucent = false
fujianjin6471
2018-11-19 00:07:21 +08:00
@alfa 谢谢,我把这一行代码放在`tabBar = UITabBar(frame: tabbarFrame)`之后,但好像没起作用
Cavolo
2018-11-19 00:20:05 +08:00
把透明关了就行
fujianjin6471
2018-11-19 00:34:56 +08:00
@Cavolo 谢谢,请问你的意思和 1 楼的代码一样吗?我试过,不行啊。还是说,我理解错了?
rannie
2018-11-19 09:17:01 +08:00
fujianjin6471
2018-11-19 14:20:32 +08:00
@rannie 谢谢,的确就是这个问题,不过我还没搞定解决方案😂
fujianjin6471
2018-11-19 20:12:05 +08:00
@rannie 好像还不太一样,我这个并不涉及到 backgroundImage,isTranslucent 和 backgroundImage 都设置过,也没有效果☹️

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/509067

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX