将 Swift 5 中的 tabBar 高度更改为 IOS 13

Change tabBar height in Swift 5 for IOS 13

我需要将 UITabBar 高度更改为 95。我可以在 iOS Swift 的旧版本中做到这一点。这是我在旧版本中工作的代码。

override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()

    tabBar.frame.size.height = 95
    tabBar.frame.origin.y = view.frame.height - 95

    menuButton.frame.origin.y = self.view.bounds.height - tabBar.frame.size.height - 10
    shadowBtn.frame.origin.y = self.view.bounds.height - tabBar.frame.size.height - 15
}

viewDidLayoutSubviews

中尝试
override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    tabBar.frame.size.height = 95
    tabBar.frame.origin.y = view.frame.height - 95
}

我正在使用以下方法

extension UIWindow {
    static var key: UIWindow? {
        if #available(iOS 13, *) {
            return UIApplication.shared.windows.first { [=10=].isKeyWindow }
        } else {
            return UIApplication.shared.keyWindow
        }
    }
}

extension UITabBar {
    override open func sizeThatFits(_ size: CGSize) -> CGSize {
        super.sizeThatFits(size)
        guard let window = UIWindow.key else {
            return super.sizeThatFits(size)
        }
        var sizeThatFits = super.sizeThatFits(size)
        sizeThatFits.height = window.safeAreaInsets.bottom + <# Height #>
        return sizeThatFits
    }
}

或者,如果您不喜欢创建扩展,请创建 UITabBar 子类,然后覆盖此方法。

当您使用 viewWillLayoutSubviewsviewDidLayoutSubviews 更改标签栏的高度时,您忘记了安全区域。您将必须通过 self.additionalSafeAreaInsets 设置额外的安全区域插入,并且在 viewDidLayoutSubviewsviewWillLayoutSubview 中这样做,标签栏将向上移动(因为您已经添加了额外的插入)。如果您不关心自动布局和安全区域,那么您可以使用 viewWillLayoutSubviewsviewDidLayoutSubviews