如何在 NavigationView (SwiftUI) 启动时显示详细视图

How to display a detailed view on startup for a NavigationView (SwiftUI)

This tutorial 使用 NavigationView 显示 List 个可以单击的元素,从而进入详细视图 LandmarkDetail。在 iPhone 上,UI 使用看起来和工作正常的 StackNavigationViewStyle(),但在 iPad 上,NavigationView 显示在侧面。我希望能够用详细视图(见下文)填充剩余的 space。

我尝试在 NavigationView 旁边显示详细视图 LandmarkDetail,如下所示:

var body: some View {
        NavigationView {
            List {
                Toggle(isOn: $showFavoritesOnly) {
                    Text("Favorites only")
                }

                ForEach(filteredLandmarks) { landmark in
                    NavigationLink(destination: LandmarkDetail(landmark: landmark)) {
                        LandmarkRow(landmark: landmark)
                    }
                }
            }
            .navigationTitle("Landmarks")
            
            LandmarkDetail(landmark: ModelData().landmarks[0])
        }
    }

此方法适用于 iPad,但在 iPhone 上会产生意想不到的结果(重叠图块等)(见下文)。有没有更好的方法来达到我想要的结果?

感谢您的帮助,对于潜在的明显错误等,我深表歉意。这是我第一次使用 SwiftUI,可用资源明显少于 Android 开发。

创建一个修饰符,根据目标设备以编程方式分配 NavigationView 样式修复了这个问题。

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

修饰符可以通过以下方式调用:

NavigationView 
{
    ...
}.navigationStyleModification()

我希望这对遇到类似问题的人有所帮助。