SwiftUI:导航链接中的自定义标签显示为灰色

Posted

技术标签:

【中文标题】SwiftUI:导航链接中的自定义标签显示为灰色【英文标题】:SwiftUI: Custom label in navigation link is greyed out 【发布时间】:2021-12-16 09:04:13 【问题描述】:

我正在尝试使用我的自定义卡片视图作为导航链接的标签。此导航链接也是一个 Grid 项。 结果是

我的卡号:

struct CityCard: View 
    var cityData: CityData
    
    var body: some View 
        VStack 
            Text("\(cityData.name)")
                .padding([.top], 10)
            Spacer()
            Image(systemName: cityData.forecastIcon)
                .resizable()
                .frame(width: 45, height: 45)
            Spacer()
            HStack(alignment: .bottom) 
                Text(String(format: "%.2f $", cityData.rate))
                    .padding([.leading, .bottom], 10)
                Spacer()
                Text(String(format: "%.2f °", cityData.degrees))
                    .padding([.trailing, .bottom], 10)
            
        .frame(width: 150, height: 150)
        .background(Color.blue)
            .cornerRadius(10)
            .navigationTitle(cityData.name)
    

我的列表视图:

struct CityList: View 
    var cities: [CityData]
    
    let columns = [
        GridItem(.flexible(minimum: 150, maximum: 150)),
        GridItem(.flexible(minimum: 150, maximum: 150))
        ]
    
    var body: some View 
        ScrollView 
            LazyVGrid(columns: columns, spacing: 20) 
                ForEach(self.cities)  item in
                    NavigationLink(destination: Text(item.name), label: 
                        CityCard(cityData: item)
                    )
                
            
        
    

有人有一个解决方案,为什么它会给我这种不透明性?

更新: 主要联系人视图是:

【问题讨论】:

【参考方案1】:

它是灰色的,因为您的视图层次结构中还没有 NavigationView,这使得实际导航到新视图成为可能。

例如,您可以将ScrollView 包装在NavigationView 中:

var body: some View 
    NavigationView 
        ScrollView 
            LazyVGrid(columns: columns, spacing: 20) 
                ForEach(self.cities)  item in
                    NavigationLink(destination: Text(item.name), label: 
                        CityCard(cityData: item)
                    )
                
            
        
    

或者,如果它只发生在您的预览中,请将NavigationView 添加到您的预览代码中:

NavigationView 
  CityList(...)

请记住,如果您使用默认强调色(蓝色,浅色模式),您的链接将在蓝色背景之上变得不可见(因为它们将是蓝色)。您可以在项目中或通过accentColor 修饰符设置自定义强调色:

NavigationView 
    //content
.accentColor(.black)

【讨论】:

我在下面更新了我的问题,我把它包裹在导航视图中 请参阅我的回答部分,我解决了这个问题 - 请参阅以“请记住,如果您有默认的强调色”开头的段落 非常感谢!!

以上是关于SwiftUI:导航链接中的自定义标签显示为灰色的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI 中的自定义模态转换

单击 UITabBarController 时的自定义操作

如何为通过 SwiftUI 中的自定义结构传递的 @State 值设置动画

SwiftUI 中的自定义事件修饰符

如何在 AppKit 上的自定义 SwiftUI 表单中右对齐项目标签?

iOS:为啥自定义标签栏项目仅显示为灰色轮廓?