在Swift 5中为IOS 13更改tabBar高度

6

我需要将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
}
2个回答

21

尝试在viewDidLayoutSubviews中执行

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

你好...这段代码是正确的,但当我想在推到另一个视图控制器时隐藏选项卡栏,选项卡栏会有延迟隐藏... - Hadiseh
@kuldeep,我在iPhone X设备上看起来很奇怪。 - Master_Tushar

1

我正在使用以下方法

extension UIWindow {
    static var key: UIWindow? {
        if #available(iOS 13, *) {
            return UIApplication.shared.windows.first { $0.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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接