SwiftUI:iPad 上不需要的分屏视图。

83

问题: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上进行模拟(包括物理设备和预览)时,而不是全屏视图,我会得到这个分屏视图: Unwanted split view with NavigationView 如果只有一个视图,没有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

如何使NavigationView在iPad上全屏显示(非分屏)?

2个回答

210

2022年7月更新

使用NavigationStack而非NavigationView可以在iPad上显示为主视图,符合您的预期:

NavigationStack {
    Text("Hello world!")
}

在更新的版本中,navigationViewStyle修饰符已被弃用
您可以将.navigationViewStyle(.stack)修饰符应用于NavigationView。
... 
    NavigationView {
        Text("Hello world!")
    }
    .navigationViewStyle(.stack)
...

编辑:下面,我将回答Alexandre在他的评论中的问题:

  • 为什么iPad默认不是全屏?这只是苹果公司做出的选择...

  • 为什么这个修改器放在NavigationView闭包外面,而导航标题放在里面...也许这可以澄清:https://dev59.com/M7Xna4cB1Zd3GeqPNJTo#57400873


2
太好了,谢谢伙计!我感到困惑的是:
  • 为什么全屏视图不是iPad的默认设置。
  • 为什么这个修饰符放在NavigationView闭包外面,而导航标题放在里面...
再次感谢!:)
- Mane Manero
3
有没有办法在运行时动态更改 StackNavigationViewStyle?我想要能够从“列1 -> 列2 -> 全屏幕”进行导航。 - simibac
1
@SimonBachmann 我想这是可能的,等我有时间了就会去弄清楚并告诉你。 - cbjeukendrup
1
不支持 macOS,有人有什么想法吗? - Parth Mehrotra
像魔法一样运作良好。 - Jitendra

8

使用这种分隔样式适用于iPad,但不适用于iPhone

extension View{
    func phoneOnlyStackNavigationView() ->some View {
        if UIDevice.current.userInterfaceIdiom == .phone{
            return AnyView(self.navigationViewStyle(StackNavigationViewStyle()))
        } else {
            return AnyView(self)
        }
    }
}

默认情况下,iPad 的 navigationViewStyle 不是 Stack,而 iPhone 的默认 navigationViewStyle 是 Stack。这是自动的。 - Farras Doko
1
实际上,在iPhone XR和11上,默认的navigationViewStyle是DoubleColumn。这段代码片段本质上强制将堆栈样式应用于这些类别的iPhone。 - LaX
1
这可能是我疯了,但我在哪里调用这个函数? - SwiftUser
就像其他视图修饰符一样,在您的SwiftUI视图的正文中使用@SwiftUser。 - Olcay Ertaş

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接