hidesBottomBarWhenPushed 使 UITabBar“跳跃”

FS.*_*.O6 2 iphone cocoa-touch uitabbarcontroller ios swift

我有一个带有标签栏和导航栏的应用程序。

我有一个BaseVC和一个DetailVC。我DetailVC从推BaseVC。我希望选项卡栏位于推送的 VC 下方DetailVC。我正在用hidesBottomBarWhenPushed它来实现它。它工作得很好,但由于某种原因,当它动画推动时,选项卡栏仍然可见,而当动画结束时,选项卡栏被隐藏。我也希望它在动画中被推到VC下面。

我的代码是:

self.hidesBottomBarWhenPushed  = true
self.navigationController?.pushViewController(detailVC, animated: true)
self.hidesBottomBarWhenPushed = false
Run Code Online (Sandbox Code Playgroud)

结果(错误)是这样的:

动图

任何人都知道为什么标签栏“跳跃”?谢谢你!

Uph*_*uth 5

在查看了相关项目后,我找到了一种使其发挥作用的方法:

  1. viewWillLayoutSubviews从 中删除 ,TabBarViewController以便它不再确定选项卡栏的高度,从而不会停止动画正常工作。
  2. 创建一个名为 MyTabBar (或您想要的任何名称)的新 swift 文件并将其放入其中:

    import UIKit
    
    class MyTabBar: UITabBar {
    
        var tabBarHeight: CGFloat = 100
    
        override func sizeThatFits(_ size: CGSize) -> CGSize {
            let superSize = super.sizeThatFits(size)
    
            return CGSize(width: superSize.width, height: self.tabBarHeight)
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 创建一个名为 TabBarStoryboard (或其他名称)的故事板。除了保存您稍后创建的 UITabBarController 之外,它不会用于任何其他用途。

  4. 在情节提要中,将 UITabBarController 的类类型设置为您的类TabBarViewController,以便在实例化时获得正确的类。

  5. 在情节提要中,将属于 UITabBarController 的 UITabBar 的类类型设置为 MyTabBar,以便实例化时它也是正确的类。

  6. 在你的 RootViewController 中替换它:

    fileprivate let tabBarViewController = TabBarViewController()
    
    Run Code Online (Sandbox Code Playgroud)

    有了这个:

    fileprivate lazy var tabBarViewController: TabBarViewController = {
        let storyboard = UIStoryboard(name: "TabBarStoryboard", bundle: nil)
        return storyboard.instantiateViewController(withIdentifier: "MyTabBarController") as! TabBarViewController
    }()
    
    Run Code Online (Sandbox Code Playgroud)
  7. 在 TabBarViewController 中将其添加到末尾viewDidLoad以设置选项卡栏的高度:

        if let tabBar = self.tabBar as? MyTabBar {
            tabBar.tabBarHeight = self.tabBarHeight
        }
    
    Run Code Online (Sandbox Code Playgroud)

现在,如果您得到所有​​正确的信息,您应该有一个您想要的大小的选项卡栏,并且动画应该正常工作,因为选项卡栏的高度不再由 viewDidLayoutSubviews 方法控制。

我必须使用故事板来保存基本的 UITabBarController,因为我找不到一种方法来设置其 UITabBar 属性的类(如果有人知道添加注释的方法)。

如果这很难理解,我已将您的项目版本上传到 dropbox,链接如下:PlayWiz-NewVersion.zip。请小心,因为它将解压缩到相同的目录结构,因此将其解压到与原始文件夹不同的文件夹,否则您将丢失原始文件夹。

该方法似乎对我来说工作正常,我认为没有理由出现任何问题,但首先要彻底测试它。