在SwiftUI中使用TabView时,NavigationView显示不正确。

8
大家好。我正在开发一个简单的SwiftUI应用程序,用于显示一些推文。它有一个带有两个视图的选项卡视图:主页面将显示推文和次要视图。
问题在于主页面有一个导航视图。如果我选择仅显示主页面,则一切似乎都正确,但是当我从TabView中显示它并向下滚动时,NavigationView感觉有点奇怪。
由于我不擅长解释,这里有一些图片:
它应该像这样 it should be like this 但它是这样的 but it is like this 我想添加.edgesIgnoringSafeArea(.top),但是现在NavigationView被缺口隐藏,并且没有产生效果。
有没有办法使NavigationView显示为第一张图片中的样子?
任何帮助都将不胜感激。提前致谢。

我的代码

HomePageView

struct HomePageView: View {

    var body: some View {
        NavigationView {
            List {
                //tweet code
            }
            .navigationBarTitle("Your feed")
        }
    }
}

TabView

struct TabController: View {
    @State private var selection = 0

    var body: some View {
        TabView(selection: $selection){
            HomePageView()
                .tabItem {
                    VStack {
                        Image(systemName: "house.fill")
                            .font(.title)
                    }
                }
                .tag(0)
            Text("Second View")
                .font(.title)
                .tabItem {
                    VStack {
                        Image(systemName: "bell.fill")
                            .font(.title)
                    }
                }
                .tag(1)
        }
    }
}

有趣的是,这个问题已经不存在了。我可以使用你的示例代码,而且不会出现任何重叠的情况。但是,一旦我添加了 edgesIgnoringSafeArea(.top),结果就变得很糟糕:状态栏和导航标题都会折叠。这是仅在 Xcode 11 beta 版本中出现的问题吗? - pd95
现在你提起来,是的,这个问题在最新的 Xcode 版本上没有出现。也许这是 SwiftUI beta 的问题? - amodrono
1个回答

14
尝试在你的标签视图中添加.edgesIgnoringSafeArea(.top)
struct ContentView: View {
    @State private var selection = 0

    var body: some View {
        TabView(selection: $selection){
            HomePageView()
                .tabItem {
                    VStack {
                        Image(systemName: "house.fill")
                            .font(.title)
                    }
                }
                .tag(0)
            Text("Second View")
                .font(.title)
                .tabItem {
                    VStack {
                        Image(systemName: "bell.fill")
                            .font(.title)
                    }
                }
                .tag(1)
        }.edgesIgnoringSafeArea(.top)
    }
}

这在iOS 13.4中已经被修复;但是,不移除edgesIgnoringSafeArea会导致NavigationView被剪裁。 - Snowy_1803

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接