SwiftUI Edge Игнорирование SafeArea в списке - PullRequest
0 голосов
/ 09 июля 2020

Я пытаюсь добавить List view к header view, игнорируя top safe area inset. Но по какой-то причине edgesIgnoringSafeArea(.top) не работает с List

        GeometryReader { geometry in
            List {
                rankingHeader(geometry: geometry)
                    .listRowInsets(EdgeInsets())
                    .animation(.none) 

                ForEach(viewModel.entries, id: \.self) { string in
                    Text(string)
                }
            }
            .edgesIgnoringSafeArea(.top)
        }

Кто-нибудь знает, как этого добиться? Тот же код работает при работе с другими представлениями, кроме List.

Ответы [ 2 ]

0 голосов
/ 09 июля 2020

Damian, Вы можете выложить код для RankingHeader и viewModel, так как по опубликованному коду сложно определить свое намерение. Однако вы используете List, но также используете ForEach. Вам не нужны и то, и другое, поскольку List принимает повторяемый список. Попробуйте что-то подобное, которое использует представление навигации для предоставления заголовка:

var body: some View {
 
    NavigationView {
        GeometryReader {proxy in
            List(0..<4) { index in
                Text("hello \(index)")
                    .foregroundColor(Color.red)
                    .background(Color.blue)
            }
            .navigationBarTitle("Events", displayMode: .inline)
            .navigationBarItems(
                leading:
                Button("Print Proxy") {
                    print("proxy: \(proxy.size)")
                }
            )
        }
    }
}

Если вы хотите игнорировать безопасные области, вы можете добавить edgeIgnoringSafeArea (.top) к модификаторам панели навигации, но это заставит список начать под заголовком, что вряд ли будет тем, что вам нужно.

0 голосов
/ 09 июля 2020

Может так, на самом деле вам нужно установить края в соответствии с GeometryReader, а не списком:

   GeometryReader { geometry in
        VStack {
            rankingHeader(geometry: geometry)
                .listRowInsets(EdgeInsets())
                .animation(.none)
            List {
                ForEach(viewModel.entries, id: \.self) { string in
                    Text(string)
                }
            }
        }
    }.edgesIgnoringSafeArea(.top)
...