web-dev-qa-db-ja.com

SwiftUI:iPadでの不要な分割ビュー

問題:パッドのビューがunwanted分割ビューで表示されます。

私の現在のセットアップは: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(物理デバイスとプレビューの両方)でシミュレートすると、次の分割画面ビューが表示されます。

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

Full screen, but without NavigationView

IPadでNavigationViewを全画面(分割画面ではなく)にするにはどうすればよいですか?

13
Mane Manero

.navigationViewStyle(StackNavigationViewStyle())修飾子をNavigationViewに適用できます!

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

編集:以下、私は彼のコメントからアレクサンドルの質問に答えています:

  • iPadのフルビューがデフォルトではないのはなぜですか?これはAppleが選択したものにすぎません...

  • この修飾子がNavigationViewクロージャの外側にあるのに、ナビゲーションタイトルが内側にある理由...これが明確になるかもしれません: https://stackoverflow.com/a/57400873/11432719

31
cbjeukendrup

この分割スタイルをiPadで使用し、iPhoneで削除するには:

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

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