1. ホーム
  2. ios

[解決済み] SwiftUIでForEachを使わずにリストから行の区切り文字を削除する方法は?

2022-05-17 08:01:44

質問

私は、カスタム行のリストを表示するために、次のコードを持っています。

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

しかし、各行の行を削除したいのです。そこで List を使わず、代わりに ForEach の中に ScrollView の中にあるのですが、これはパディングやマージンを含むすべてのスタイリングを完全に削除してしまいます。私はただ行を削除したいだけで、他には何もしていません。

助けてください、ありがとうございます。

どのように解決するのですか?

iOS 15です。

今年、Apple は新しいモディファイア .listRowSeparator という修飾子が追加され、セパレータのスタイルに使用できるようになりました。 .hidden を渡すと非表示になります。

List {
    ForEach(items, id:\.self) { 
        Text("Row \($0)")
            .listRowSeparator(.hidden)
    }
}


iOS 14です。

を使用することを検討してください。 LazyVStack の中に ScrollView の中に入れてください(なぜなら iOS は ではありません。 がSwiftUIリストの外観をサポートしなくなったからです)。


iOS 13。

⚠️この方法は非推奨で、iOS 14から使えなくなりました。

というものがあり UITableView の背後には、SwiftUIの List の後ろにあります。そのため、削除するために

余分なセパレータ(リストの下)。

が必要です。 tableFooterView を削除し

すべてのセパレータ(実際のセパレータを含む)。

必要な separatorStyle であることが必要です。 .none

使用例

init() {
    if #available(iOS 14.0, *) { 
        // iOS 14 doesn't have extra separators below the list by default.
    } else {
        // To remove only extra separators below the list:
        UITableView.appearance().tableFooterView = UIView()
    }

    // To remove all separators including the actual ones:
    UITableView.appearance().separatorStyle = .none
}

var body: some View {
    List {
        Text("Item 1")
        Text("Item 2")
        Text("Item 3")
    }
}

静的リストは余分なセパレータを表示しないことに注意してください。 の下にある はデフォルトで