iOS 15 TabView 导航栏透明度问题

问题描述 投票:0回答:2

新的 iOS 15 使导航栏背景完全透明,如果后面没有元素,如果有一个列表并且您将元素滚动到导航栏后面,这将获得白色半透明背景,但是如果我使用 TabView,其中每个 TabItem 都有在选项卡项目之间切换时,导航栏背景内的列表未正确更新,导航栏始终保持透明背景。

我使用 SwiftUI,我的基本代码如下所示:

struct Main: View {
    var body: some View {
        WindowGroup {
            NavigationView {
                TabView {
                    TabElement()
                    TabElement()
                    TabElement()
                    TabElement()
                    TabElement()
                }.navigationBarTitle(Text("Main"), displayMode: .inline).navigationBarBackButtonHidden(true)
            }
        }
    }
}

struct TabElement: View {
    var body: some View {
        VStack {
            List {
               Text("empty")
               Text("empty")
               Text("empty")
               Text("empty")
               Text("empty")
               Text("empty")
               Text("empty")
               Text("empty")
               Text("empty")
               Text("empty")
           }.listStyle(InsetGroupedListStyle())
        }.tabItem {
            Image(systemName: "star.fill")
            Text("dummy")
        }
    }
}

因此,这段代码创建了一个包含五个选项卡的选项卡视图,每个选项卡都有一个包含十个文本视图的列表,如果我切换到任何其他选项卡并将元素滚动到顶部,则可以通过导航栏而不是后面看到该列表。

是什么导致了这种行为?这是某种错误还是我的代码错误?这个问题在 iOS 14.* 中不会发生,因为导航栏始终具有白色背景。

注意: 我发现可以使用:

if #available(iOS 15, *) {
    let appearance = UINavigationBarAppearance()
    appearance.configureWithOpaqueBackground()
    UINavigationBar.appearance().standardAppearance = appearance
    UINavigationBar.appearance().scrollEdgeAppearance = appearance
}

...在我的

ApDelegate
中,但这看起来是一种消除导航栏中透明度的棘手方法。如果 Apple 决定在 iOS 15 中使用这种新设计,我想在我的应用程序中实现它,但前提是透明度正确更新。

swiftui navigationbar ios15 swiftui-tabview
2个回答
0
投票

是的,苹果在 iOS 15 中改变了这一点。
如果您想更改单个 ViewController 中导航栏的外观,可以使用以下代码:https://stackoverflow.com/a/69493819/9263676


0
投票

TabView
包裹在
ZStack
中为我解决了这个问题:

ZStack {
    Color.clear
        .ignoresSafeArea()
    TabView {
    ...
    }
}

我怀疑这可行,因为现在导航栏后面有一个视图,这会导致使用材质背景。

© www.soinside.com 2019 - 2024. All rights reserved.