SwiftUI中UISplitViewController的相等性是什么

时间:2019-08-07 15:43:15

标签: ios swift swiftui

我需要实现一个与iPad和iPhone中的默认Mail应用程序接近的UI。

该应用有两个部分,通常,在iPad中,主视图将显示在左侧,详细视图将在右侧显示。

在电话中,主视图将显示在整个屏幕上,详细信息视图可以推入第二屏幕。

如何在新的SwiftUI中实现它

1 个答案:

答案 0 :(得分:12)

SwiftUI中实际上没有SplitView,但是当您使用以下代码时,您所描述的内容将自动完成:

import SwiftUI

struct MyView: View {
    var body: some View {
        NavigationView {
            // The first View inside the NavigationView is the Master
            List(1 ... 5, id: \.self) { x in
                NavigationLink(destination: SecondView(detail: x)) {
                    Text("Master\nYou can display a list for example")
                }
            }
            .navigationBarTitle("Master")
            // The second View is the Detail
            Text("Detail placeholder\nHere you could display something when nothing from the list is selected")
                .navigationBarTitle("Detail")
        }
    }
}

struct SecondView: View {
    var detail: Int
    var body: some View {
        Text("Now you are seeing the real detail View! This is detail \(detail)")
    }
}

这也是为什么.navigationBarTitle()修饰符应应用在NavigationView的内部视图 中,而不是应用在NavigationView本身上的原因。

奖金:如果您喜欢splitView navigationViewStyle,则可以在NavigationView上应用.navigationViewStyle(StackNavigationViewStyle())修饰符。

编辑:我发现NavigationLink具有一个isDetailLink(Bool)修饰符。默认值显示为true,因为默认情况下,“目的地”显示在详细信息视图(右侧)中。但是,当您将此修饰符设置为false时,目的地将显示为母版(在左侧)。