navigationBarTitle 与 SwiftUI 中的列表标题重叠

Posted

技术标签:

【中文标题】navigationBarTitle 与 SwiftUI 中的列表标题重叠【英文标题】:navigationBarTitle overlapping with List title in SwiftUI 【发布时间】:2020-07-29 18:21:09 【问题描述】:

我刚刚开始使用 SwiftUI 并尝试实现具有水平和垂直列表的视图。虽然设计看起来不错,但列表标题的顶部项目与导航栏标题有一些重叠。请检查图像:

一个列表中有 2 个水平滚动视图。第二个滚动视图的标题也不可见。 以下是我的导航视图代码:

struct HomeView: View 
    var categories: [String: [Drink]] 
        .init(
            grouping: drinkData, by: $0.category.rawValue)
    
    var body: some View 
        NavigationView 
            List 
                ForEach(categories.keys.sorted(), id: \String.self)  key in
                    DrinkRow(categoryName: "\(key) Drinks", drinks: self.categories[key]!)
                        .frame(height: 320)
                        .padding(.top)
                        .padding(.bottom)
                
            
        .navigationBarTitle(Text("COFFEE DB"))
        
    

列表的项目在以下文件中作为水平滚动视图:

struct DrinkRow: View 
    var categoryName: String
    var drinks: [Drink]
    var body: some View 
        VStack(alignment: .leading) 
            Text(self.categoryName)
                .font(.title)
            ScrollView(.horizontal, showsIndicators: false) 
                 HStack 
                     ForEach(self.drinks, id: \.name)  drink in
                        NavigationLink(destination: DrinkDetail(drink: drink)) 
                            DrinkItem(drink: drink).frame(width: 300).padding(.trailing, 30)
                        
                     
                 
            
        .padding(.top)
    

【问题讨论】:

【参考方案1】:

似乎这是由于您为列表中的每个元素提供的固定框架:

.frame(height: 320)

尝试移除固定高度,或确保DrinkRow 完全适合此尺寸。

【讨论】:

【参考方案2】:

您可以尝试添加 .navigationBarTranslucent 修饰符并将其设置为 false

.navigationBarTranslucent(false)

【讨论】:

以上是关于navigationBarTitle 与 SwiftUI 中的列表标题重叠的主要内容,如果未能解决你的问题,请参考以下文章

在 swiftUI 中,如何仅删除 NavigationBarTitle 的安全区域?

如何使navigationBarTitle和navigationBarItem的重叠区域可点击 - SwiftUI

swiftui 对成员“navigationBarTitle”的模糊引用

NavigationBarTitle 导致 TabView 内部出错

SwiftUI 2.0 中的 navigationBarTitle 和 navigationTitle 有啥区别? [复制]

Navigationbartitle 显示一个白框