【问题标题】:SwiftUI: unwanted split view on iPadSwiftUI:iPad 上不需要的拆分视图
【发布时间】:2019-12-16 22:50:05
【问题描述】:

问题:Pad 上的视图显示有不需要的拆分视图。

我目前的设置是: Catalina OSX 测试版 5 + Xcode 11 测试版 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

如何在 iPad 上制作 NavigationView 全屏(不是分屏)?

【问题讨论】:

    标签: ios swift swiftui xcode11


    【解决方案1】:

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

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

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

    • 为什么 iPad 不默认全屏显示?这只是 Apple 的选择……

    • 为什么这个修饰符会出现在 NavigationView 闭包之外,而 Navigation Title 会出现在闭包内部...也许这可以澄清一下:https://stackoverflow.com/a/57400873/11432719

    【讨论】:

    • 完美,谢谢伙计!我感到困惑的是: - 为什么全视图不是 iPad 的默认设置。 - 为什么这个修饰符在 NavigationView 闭包之外,而 Navigation Title 在里面......再次感谢! :)
    • 有没有办法动态改变 StackNavigationViewStyle?我希望能够从column1 -> column2 -> fullscreen 导航。
    • @SimonBachmann 我想这是可能的,当我有时间我会弄清楚并告诉你。
    • 在 macOS 上不可用,有人知道在那里做什么吗?
    • 像魅力一样工作?
    【解决方案2】:

    要在 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。它是自动的。
    • 并非如此,例如在 iPhone XR 和 11 上,默认的 navigationViewStyle 是 DoubleColumn。这段代码 sn-p 本质上是强制这些 iPhone 类的堆栈样式。
    • 这可能让我发疯了,但是我在哪里调用这个函数呢?
    猜你喜欢
    • 2014-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-24
    • 2023-04-03
    • 2011-02-07
    • 1970-01-01
    相关资源
    最近更新 更多