将 TabView 放在 NavigationView 中使标题透明

Posted

技术标签:

【中文标题】将 TabView 放在 NavigationView 中使标题透明【英文标题】:Placing TabView inside NavigationView makes header transparent 【发布时间】:2021-01-07 15:40:23 【问题描述】:

在我围绕它添加 NavigationView 之前,TabView 对我来说工作得很好。 这是正常行为

当我在 TabView 周围添加 NavigationView 时出现问题 - 滚动时我在黑色矩形前面看到“测试”。

我试过设置

UINavigationBar.appearance().backgroundColor

到一些不透明的颜色,但它只是在所有东西的前面绘制另一个矩形。

在 TabView 周围使用 NavigationView 时,有什么方法可以使黑色矩形不透明?

哦,还有一件事..我尝试删除

.edgesIgnoringSafeArea(.top)

解决了问题,但顶部区域出现巨大的空白:

import SwiftUI

struct ContentView: View 
    
    let tabData = [
        TabItem(menuTitle: Text("item 1"), menuImage: Image(systemName: "heart.fill"), bodyHeadline: Text("Postnatal recovery"), bodyMeta: Text(""), tag: 1),
        TabItem(menuTitle: Text("item 2"), menuImage: Image(systemName: "heart.fill"), bodyHeadline: Text("Weight loss"), bodyMeta: Text(""), tag: 2),
    ]
    
    var body: some View 
        NavigationView 
            ZStack 
                TabView 
                    ForEach(tabData)  tabItem in
                        VStack 
                            VStack 
                                Rectangle()
                            
                            .frame(height: 90)
                            .background(Color.yellow)
                            
                            ScrollView 
                                LazyVStack(spacing: 0) 
                                    ForEach(0...100, id:\.self)  val in
                                        ZStack 
                                            Text("test")
                                                .font(.system(size: 128))
                                         // ZStack
                                        .background(Color.white)
                                     // ForEach
                                
                            
                            .background(Color.blue)
                            
                        
                        
                        .tabItem 
                            tabItem.menuImage
                            tabItem.menuTitle
                                .foregroundColor(Color.red)
                        
                        .edgesIgnoringSafeArea(.top)
                     // ForEach
                    
                 // TabView
             // ZStack
         // NavigationView
    


struct ContentView_Previews: PreviewProvider 
    static var previews: some View 
        ContentView()
    


struct TabItem: Identifiable 
    var id = UUID()
    var menuTitle: Text
    var menuImage: Image
    var bodyHeadline: Text
    var bodyMeta: Text
    var tag: Int

【问题讨论】:

【参考方案1】:

添加

.navigationBarHidden(true).navigationBarTitle("")

一切顺利

【讨论】:

以上是关于将 TabView 放在 NavigationView 中使标题透明的主要内容,如果未能解决你的问题,请参考以下文章

如何将服务器端和客户端的 tabview 组件与 jsf 匹配?

SwiftUI:将项目动态添加到 TabView [重复]

如何将 TabView 的选项卡排列成多行?

嵌入在 NavigationView 中的 TabView 将内容下推

SwiftUI - 如何将工具栏添加到 NavigationView 内的 TabView 选项卡?

如何将 NavigationView 从具有固定尺寸的 TabView 扩展到全屏?