SwiftUI:iPad上不必要的拆分视图

时间:2019-08-09 08:07:41

标签: tabs swiftui xcode11 macos-catalina

问题: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(物理设备和预览版)上模拟而不是全屏显示时,我得到了以下分屏显示:

enter image description here

如果我只有一个视图,而没有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

enter image description here

如何在iPad上将NavigationView全屏显示(而不是分屏显示)?

感谢有人可以帮忙!

2 个答案:

答案 0 :(得分:23)

您可以将.navigationViewStyle(StackNavigationViewStyle())修饰符应用于NavigationView!

... 
    NavigationView {
        Text("Hello world!")
    }
    .navigationViewStyle(StackNavigationViewStyle())
...

编辑:下面,我从他的评论中回答亚历山大的问题:

  • 为什么全屏不是iPad的默认视图?这只是Apple的选择...

  • 为什么此修饰符位于NavigationView闭包之外,而导航标题位于内部... 也许可以这样澄清:https://stackoverflow.com/a/57400873/11432719

答案 1 :(得分:3)

要在 iPad 中使用这种拆分样式,而在 iPhone 中删除:

    extension View{
    func phoneOnlyStackNavigationView() ->some View{

        if UIDevice.current.userInterfaceIdiom == .phone{
            return AnyView(self.navigationViewStyle(StackNavigationViewStyle()))
        }else{
            return AnyView(self)
        }
    }
}