SwiftUI - TabView和NavigationView组合出现灰色区域

5

当我在使用NavigationView的时候,如果设置isTranslucentfalse,我的选项卡视图出现了一些问题。

有人知道如何解决吗?问题如下图所示。

我需要将透明度设置为false,否则我无法获得深色。

enter image description here


1
请将代码本身作为纯文本发布,而不是(或除此之外)屏幕截图。 - Michael Fourre
4个回答

7

您可以设置背景颜色。但是不要将isTranslucent设置为false,否则会产生您提到的这些伪影。

UITabBar.appearance().backgroundColor = .black
UINavigationBar.appearance().backgroundColor = .black

变得更暗了。尽管如此它并不完全是不透明的。

编辑: 刚刚看了iOS 13现代化您的UI 这才是正确的方法:

TabView和NavigationView实际上是用于旧版UITabBarController和UINavigationController的UIHostedController:

let appearance = UITabBarAppearance()
appearance.configureWithOpaqueBackground()
appearance.titleTextAttributes = [.foregroundColor: UIColor.white]
appearance.largeTitleTextAttributes = [.foregroundColor: UIColor  .white]

然后设置各种外观的外观。

tabBar.standardAppearance = appearance

第二次编辑:
extension UINavigationController {
    override open func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        let appearance = UINavigationBarAppearance()
        appearance.configureWithOpaqueBackground()
        navigationBar.standardAppearance = appearance
        navigationBar.compactAppearance = appearance
        navigationBar.scrollEdgeAppearance = appearance
    }
}

extension UITabBarController {
    override open func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        let appearance = UITabBarAppearance()
        appearance.configureWithOpaqueBackground()
        tabBar.standardAppearance = appearance
    }
}

有一个更简洁的方法可以访问 tabBar 和 navBar。

参考资料:https://developer.apple.com/videos/play/wwdc2019/224/


1
我正在使用SwiftUI和UIKit。我的选项卡栏是在storyboard中创建的,但是我遇到了一个SwiftUI视图,导致底部出现额外的空间,就像你提到的那样。我尝试了所有以上的解决方案,但都没有起作用。
我正在使用Xcode 12.4进行开发。我的解决方案是在storyboard中将Translucent标记为true,这样底部的额外灰色条就消失了。

See screenshot


0

只需像这样在扩展中进行自定义:

extension UITabBarController {
    override open func viewDidLoad() {
        super.viewDidLoad()
        let appearance = UITabBarAppearance()
        appearance.backgroundColor = .black
        tabBar.standardAppearance = appearance
    }
}

请注意,重写的函数必须是viewDidLoad()。当它是一个viewDidAppear(:)函数时,至少对我来说无法工作。

-2

这比所有的都容易,只需删除下一行:

UITabBar.appearance().isTranslucent = false

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