更新到 Xcode 11 后,CGAffineTransform 翻译在标签栏上不起作用

Tho*_*mas 5 cgaffinetransform swift ios13 xcode11

我正在尝试将我的项目更新到 iOS 13。我曾经使用 CGAffineTransform 翻译隐藏选项卡栏,并且在我更新到 Xcode 11 并在 iOS 13 上执行我的代码之前,它就像一个魅力。

我尝试用一​​个简单的 UITabBarController 和一个简单的 UIViewController 重新创建一个小项目,并带有一个按钮来显示/隐藏我的标签栏。(见下文)。

甚至向身份的转变也没有按预期进行。

其他 CGAffineTransform 像旋转一样按预期工作。

@objc fileprivate func showOrHideTabbar() {

        if !hidden {
            print("hiding")
            UIView.animate(withDuration: 0.7, delay: 0, options: .curveEaseOut, animations: {
                self.tabBarController?.tabBar.transform = CGAffineTransform(translationX: 0, y: 100)
            })
        } else {
            print("showing")
            UIView.animate(withDuration: 0.7, delay: 0, options: .curveEaseOut, animations: {
                self.tabBarController?.tabBar.transform = .identity
            })
        }
        hidden = !hidden
    }
Run Code Online (Sandbox Code Playgroud)

小智 2

我知道这可能会迟到,但对于寻找此答案的其他用户可能会有所帮助。要将标签栏平移到右/左/上/下,您需要更改其原点。所以,代替这一行:

self.tabBarController?.tabBar.transform = CGAffineTransform(translationX: 0, y: 100)
Run Code Online (Sandbox Code Playgroud)

你应该将其更改为这一行:

self.tabBarController?.tabBar.frame.origin.y += 100
Run Code Online (Sandbox Code Playgroud)

当然,您可以更改值 100 以满足您的需要,此行会将标签栏移动到底部,如果您希望它移动到顶部,您需要这样做:

self.tabBarController?.tabBar.frame.origin.y -= 100
Run Code Online (Sandbox Code Playgroud)

显然,如果您想更改 x 位置,则可以将 .y 更改为 .x。