Есть ли у вас опыт работы с SwifUI NavigationView в альбомной ориентации на симуляторе iPhone XR?
Я попытался запустить свое приложение в альбомной ориентации на симуляторе iPhone XR и получил пустой экран.
Код ниже мой тест. Он корректно работает на симуляторе iPhone 8, а не на симуляторе iPhone XR, если я удалю NavigationView.
import SwiftUI
struct ContentView: View {
var body: some View {
NavigationView {
GeometryReader { gp in
VStack(alignment: HorizontalAlignment.center) {
Text("Width: \(gp.size.width)")
Text("Height: \(gp.size.height)")
}
}
}
}
}
Я ожидаю, что увижу размер экрана как в альбомной, так и в портретной ориентации.
У кого-нибудь есть опыт работы с этой комбинацией?
3 ответа
Нет ничего плохого. Просто, когда большой iPhone в альбомной ориентации, его класс горизонтального размера установлен на .regular
, вместо .compact
, Думайте об этом, как будто это был iPad.
Вы можете проверить это, сдвинув с левого размера экрана:
Если вы измените свой код, чтобы добавить представление по умолчанию, когда ничего не выбрано, вы получите этот другой вид:
struct ContentView: View {
var body: some View {
NavigationView {
GeometryReader { gp in
VStack(alignment: HorizontalAlignment.center) {
Text("Width: \(gp.size.width)")
Text("Height: \(gp.size.height)")
NavigationLink(destination: Text("Something got selected")) { Text("Select something") }
}
}
Text("No Selection")
}
}
}
И если вы хотите, чтобы это.compact, вы делаете следующее:
struct ContentView: View {
var body: some View {
NavigationView {
GeometryReader { gp in
VStack(alignment: HorizontalAlignment.center) {
Text("Width: \(gp.size.width)")
Text("Height: \(gp.size.height)")
NavigationLink(destination: Text("Something got selected")) { Text("Select something") }
}
}
Text("No Selection")
}.environment(\.horizontalSizeClass, .compact)
}
}
Добавление этого модификатора в NavigationView приводит к отключению основных подробных представлений.
NavigationView {
// Code
}
.environment(\.horizontalSizeClass, .compact)
Другой способ решить эту проблему — заставить NavigationView использовать стиль стека.
NavigationView {
Text("Hello World")
}.navigationViewStyle(StackNavigationViewStyle())
Или новее:
NavigationView {
Text("Hello World")
}.navigationViewStyle(.stack)