4

SidebarListStyleNavigationView.

struct ContentView: View {
    let data = ["One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen"]
    
    var body: some View {
        NavigationView {
            List {
                Section(header: Text("Section")) {
                    ForEach(data, id: \.self) { word in
                        Text(word)
                    }
                }
            }
            .listStyle(SidebarListStyle())
            .navigationBarTitle(Text("Title"), displayMode: .large)
        }
    }
}

问题是列表中的每一行后面都有一个白色矩形,但仅限于纵向模式。风景很好。

我不想要那个白色背景,有人知道如何删除它吗?此外,在启动应用程序时,它似乎出现了故障——起初它很好,然后它添加了白色背景。

奇怪的是,如果我添加.navigationViewStyle(StackNavigationViewStyle())到 中NavigationView,白色背景会消失并且可以正常启动。

struct ContentView: View {
    let data = ["One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen"]
    
    var body: some View {
        NavigationView {
            List {
                Section(header: Text("Section")) {
                    ForEach(data, id: \.self) { word in
                        Text(word)
                    }
                }
            }
            .listStyle(SidebarListStyle())
            .navigationBarTitle(Text("Title"), displayMode: .large)
        }
        .navigationViewStyle(StackNavigationViewStyle())
    }
}

左:启动方式,右:启动后的样子

↑ 这就是我想要的样子。

但是,现在横向模式仅限于全角列表,我也不想要。

编辑:@Omid的回答

我添加了背景颜色以匹配默认颜色:

Text(word)
.listRowBackground(Color(UIColor.systemGroupedBackground))

但是启动故障仍然存在。

编辑:@pawello2222的回答

工作正常,只是旋转时奇怪的过渡。

4

2 回答 2

4

问题

奇怪的是,如果我将 .navigationViewStyle(StackNavigationViewStyle()) 添加到 NavigationView,白色背景会消失并且可以正常启动。

NavigationView这是因为在 iOS 14 中,或的默认样式List不再总是相同的。看:


解决方案

您可以根据以下情况使用不同NavigationStyle@Environment(\.horizontalSizeClass)

struct CustomNavigationStyle: ViewModifier {
    @Environment(\.horizontalSizeClass) var horizontalSizeClass

    @ViewBuilder
    func body(content: Content) -> some View {
        if horizontalSizeClass == .compact {
            content.navigationViewStyle(StackNavigationViewStyle())
        } else {
            content.navigationViewStyle(DoubleColumnNavigationViewStyle())
        }
    }
}
NavigationView {
    ...
}
.modifier(CustomNavigationStyle())
于 2020-11-10T15:12:48.963 回答
1

您可以将颜色更改为您想要的颜色!

Text(word)
  .listRowBackground(Color.yellow)

在此处输入图像描述

于 2020-11-08T08:21:33.340 回答