簡體   English   中英

如何在 NavigationView (SwiftUI) 啟動時顯示詳細視圖

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

本教程使用NavigationView來顯示可單擊的元素List ,從而生成詳細視圖LandmarkDetail 在 iPhone 上,UI 使用看起來和工作正常的StackNavigationViewStyle() ,但在 iPad 上, NavigationView顯示在側面。 我希望能夠用詳細視圖填充剩余空間(見下文)。

實際輸出與期望輸出

我試圖在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()

我希望這可以幫助有類似問題的人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM