SwiftUI-具有NavigationView的TabView生成灰色区域

时间:2019-09-19 19:23:41

标签: swift xcode user-interface swiftui ios13

isTranslucent 设置为 false 并与 NavigationView 结合使用时,选项卡式视图出现一些问题。

有人知道如何解决此问题吗?问题显示在所附图像中。

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

enter image description here

4 个答案:

答案 0 :(得分:1)

您可以设置backgroundColor。不要将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 :(得分:0)

我在 SwiftUI 中使用了 UIKit。我的标签栏是在故事板中创建的,但我获得额外底部空间的视图是您提到的 swiftui 视图。我尝试了上述所有解决方案,但没有任何效果。

我使用 Xcode 12.4 进行开发。我的解决方案是在故事板中将 Translucent 标记为 true 并且底部额外的灰色条消失了。

See screenshot

答案 2 :(得分:0)

只需在这样的扩展程序中自定义它:

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

注意被覆盖的函数必须是viewDidLoad()。至少当它是 viewDidAppear(:) 函数时它对我不起作用。

答案 3 :(得分:-2)

比这一切都容易,只需删除下一行:

UITabBar.appearance().isTranslucent = false