В моем NavigationView «.edgesIgnoringSafeArea» не перемещает содержимое за пределы безопасной области. - PullRequest
0 голосов
/ 09 февраля 2020

Мне бы хотелось, чтобы .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 Ответ

2 голосов
/ 09 февраля 2020

Итак, в основном, это ваше мнение (совет, всегда старайтесь выкладывать минимальную версию, которую люди могут просто скопировать и вставить в 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) ТАКЖЕ к 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)
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...