web-dev-qa-db-ja.com

ForEachを使用せずにSwiftUIのリストから行セパレーターを削除する方法は?

カスタム行のリストを表示するこのコードがあります。

struct ContentView : View {
    var body: some View {
        VStack(alignment: .leading) {
            List(1...10) {_ in
                CustomRow()
            }
        }
    }
}

ただし、各行の行を削除したいと思います。 Listを使用せず、代わりにForEach内でScrollViewを使用しようとしましたが、パディングやマージンを含むすべてのスタイルが完全に削除されました。行だけを削除したいだけです。

助けてください、ありがとう。

37
grey

ScrollViewを使用しますか?

リストを表すいくつかの状態

@State var menuItems: [String] = ["One", "Two", "Three"]

A SwiftUI内のForEachScrollViewループ

ScrollView {
    ForEach(self.menuItems, id: \.self) { item in
        Text(item)
    }
}
0
Jon Vogel

@Mojtaba Hosseiniの回答に加えて、これは、リストの下の余分なセパレーターを非表示にする方法です最後のセパレーターを含む

init() {
    UITableView.appearance().tableFooterView = UIView(frame: CGRect(x: 0, y: 0, width: 0, height: 1))
}
0
Cinn
  1. .listRowInsets(EdgeInsets(top:5、先頭:5、下:5、末尾:5))を挿入して行にパディングを追加すると、VSTack内でスタイルを設定できます。

     struct ContentView : View {
      var body: some View {
      VStack(alignment: .leading) {
          List(1...10) {_ in
            CustomRow()
       }
        }
        .listRowInsets(EdgeInsets(top: 5, leading: 5, bottom: 5, trailing: 5))
      }
      }
    
  2. 2番目のアプローチは次のとおりです(Bindingを渡す必要がある場合は、enableNext渡された値を無視しない場合は、以下を参照してください)。

    struct ContentView : View { 
    @State var enableNextState: Bool = false
         var body: some View {
             VStack(alignment: .leading) {
                  List(1...10) {_ in
                      CustomRow(enableNext: enableNextState )
                      }
                    }
                   }
                }
    
          struct CustomRow: View {
               @Binding var enableNext: Bool
    
                init(enableNext: Binding<Bool>) {
                    self._enableNext = enableNext
                    UITableView.appearance().separatorColor = .clear
    
                  }
    
                  var body: some View {
                    Text("ROW DATA")
                  }
                }
    
0