web-dev-qa-db-ja.com

リストMac OSのSwiftUI背景色

Mac OSでListViewを使用しています。そのListViewの背景色を変更しようとしています。しかし、それは予想されるほど簡単ではありません。

ListViewで.background(Color(.red))属性を使用してみました。それは何も変わりませんでした。

テーブルの行に影響を与える.listRowBackground(Color(.red))のみを見つけることができました。ただし、他の背景には影響はありませんでした。

デモ用に少しデモを用意しました。

私の見解では:

  VStack
    {
        List()
        {
            Text("Test")
                .listRowBackground(Color.green)

            Text("Test")
                .listRowBackground(Color.green)

            Text("Test")
                .listRowBackground(Color.green)

        }.background(Color(.red))

    }.background(Color(.red))

それは私が得る結果です:

enter image description here

主な背景は変わりません。 UITableView.appearanceを変更するソリューションについて読みましたが、SwiftUI for Mac OSではそれができません。

前もって感謝します

5
davidev

残念ながら、ListStyleプロトコルは文書化されておらず、.listStyle修飾子の使用法は非常に限られているため、CarouselListStyle, DefaultListStyle, GroupedListStyle ,PlainListStyle, SidebarListStyleから選択できます

ScrollViewとForEachを組み合わせてListを模倣してみてください。これにより多くの柔軟性が得られ、欠落している部分は簡単に記述できます。開発者がListStyleを使用できるようになると、コードを変更するのは簡単になります...

enter image description here ソースコード付き

struct ContentView: View {
    var body: some View {
        HStack(spacing: 0) {
            ScrollView {
                ForEach(0 ..< 4) { idx in
                    VStack(alignment: .leading) {
                        Divider().background(Color.blue)
                        Text("Test \(idx)")
                            .padding(.horizontal, 10)
                            .background(Color.pink)
                        //Divider()
                    }.padding(.bottom, -6)
                }
            }
                .frame(maxWidth: 100)
            .background(Color.gray)

            Color.green
        }
        .frame(maxWidth: .infinity, maxHeight: .infinity)
    }
}
1
user3441734