在我的 NavigationView '.edgesIgnoringSafeArea' 中不会将内容移动到安全区域之外

Posted

技术标签:

【中文标题】在我的 NavigationView \'.edgesIgnoringSafeArea\' 中不会将内容移动到安全区域之外【英文标题】:In my NavigationView '.edgesIgnoringSafeArea' does not move content past the safe area在我的 NavigationView '.edgesIgnoringSafeArea' 中不会将内容移动到安全区域之外 【发布时间】:2020-02-09 13:03:06 【问题描述】:

我希望 .edgesIgnoringSafeArea(.all) 将内容正好放在画布的顶部

我希望它显示如下: https://i.stack.imgur.com/RzrO6.png

相反,它显示如下: https://i.stack.imgur.com/sbbaU.png

内容视图:

TabView 
    NavigationView 
        MainContentView()
    
...

主要内容视图:

var body: some View 
        VStack(alignment: .leading, spacing: 20) 
            ...
        
        .padding([.horizontal, .top])
        .navigationBarTitle("Title")
    

详细视图:

struct PostDetail: View     
    var post: Post

    var body: some View 
        List 
            Image(post.imageName)
            .resizable()
            .aspectRatio(contentMode: .fit)
            .listRowInsets(EdgeInsets())
            VStack(spacing: 20) 
                Text(post.name)
                    .foregroundColor(.primary)
                    .font(.largeTitle)
                    .fontWeight(.bold)
                Text(post.description)
                    .foregroundColor(.primary)
                    .font(.body)
                    .lineLimit(nil)
                    .lineSpacing(12)
                VStack 
                    HStack 
                        Spacer()
                        ViewMoreButton(post: post)
                        Spacer()
                    
                
            
            .padding(.top)
            .padding(.bottom)
        
        .edgesIgnoringSafeArea(.top) //Does nothing!
        .navigationBarHidden(true) // Does nothing!
    



【问题讨论】:

您必须发布一些代码,以便我们可以看到您可能做错了什么。 在您发布时正在编辑,已完成 【参考方案1】:

所以基本上,这是你的观点(提示,总是尝试发布人们可以复制并粘贴到 Xcode 中的最低版本):

struct ContentView: View 
  var body: some View 
    TabView 
      NavigationView 
        VStack(alignment: .leading, spacing: 20) 
          List 
            Image("bg")
              .resizable()
              .aspectRatio(contentMode: .fit)
              .listRowInsets(EdgeInsets())
          
          .edgesIgnoringSafeArea(.top)
          .navigationBarHidden(true)
        
        .navigationBarTitle("Title")
      
    
  

是的,我看到了同样的情况:图像未显示在顶部安全区域中。删除 TabView 后,它会按预期工作。

解决方法是将.edgesIgnoringSafeArea(.top) ALSO 添加到TabView

struct ContentView: View 
  var body: some View 
    TabView 
      NavigationView 
        VStack(alignment: .leading, spacing: 20) 
          List 
            Image("bg")
              .resizable()
              .aspectRatio(contentMode: .fit)
              .listRowInsets(EdgeInsets())
          
          .edgesIgnoringSafeArea(.top)
          .navigationBarHidden(true)
        
        .navigationBarTitle("Title")
      
    
    .edgesIgnoringSafeArea(.top)
  

【讨论】:

这正是我想要的。谢谢!将在船上收取小费

以上是关于在我的 NavigationView '.edgesIgnoringSafeArea' 中不会将内容移动到安全区域之外的主要内容,如果未能解决你的问题,请参考以下文章

Swiftui NavigationView 计时器延迟

工具栏正在删除 NavigationView 中的后退按钮

打开 NavigationView 仅单击左上角图标,但不使用 swype 手势

在NavigationView中更新SelectionIndicator的颜色

跨Windows 10版本无法在NavigationView的项模板中实现相同的行为

从 Core Data 加载图像使 NavigationView 过渡变得跳跃