SwiftUI: нежелательный разделенный вид на iPad
Проблема: вид на Pad отображается с нежелательным разделением.
Моя текущая настройка: Catalina OSX beta 5 + Xcode 11 Beta 5
Вот код, который я использовал, с навигационным видом и заголовком навигации
import SwiftUI
struct SwiftUIView: View {
var body: some View {
NavigationView {
Text("Search")
.navigationBarTitle(Text("Search"))
}
}
}
#if DEBUG
struct SwiftUIView_Previews: PreviewProvider {
static var previews: some View {
SwiftUIView()
}
}
#endif
При моделировании на iPad (как на физическом устройстве, так и в режиме предварительного просмотра) вместо полноэкранного просмотра я получаю следующее представление:
Если у меня есть только вид без NavigationView, я получаю полноэкранный вид:
import SwiftUI
struct SwiftUIView: View {
var body: some View {
Text("Hello World!")
}
}
#if DEBUG
struct SwiftUIView_Previews: PreviewProvider {
static var previews: some View {
SwiftUIView()
}
}
#endif
Как сделать полноэкранный (не разделенный) экран NavigationView на iPad?
Цените, если кто-то может помочь!
1 ответ
Вы можете применить .navigationViewStyle(StackNavigationViewStyle())
модификатор для NavigationView!
...
NavigationView {
Text("Hello world!")
}
.navigationViewStyle(StackNavigationViewStyle())
...
Изменить: ниже, я отвечаю на вопросы Александра из его комментария:
Почему полноэкранный режим не используется по умолчанию для iPad? Это просто выбор, сделанный Apple...
Почему этот модификатор выходит за пределы закрытия NavigationView, а заголовок навигации идет внутрь... Может быть, это дает пояснение: /questions/49847778/kakovo-ravenstvo-uisplitviewcontroller-v-swiftui/49847786#49847786
Чтобы использовать этот стиль разделения для iPad, но удалить его для iPhone:
extension View{
func phoneOnlyStackNavigationView() ->some View{
if UIDevice.current.userInterfaceIdiom == .phone{
return AnyView(self.navigationViewStyle(StackNavigationViewStyle()))
}else{
return AnyView(self)
}
}
}