Как удалить разделители строк из списка в SwiftUI без использования ForEach?

У меня есть этот код для отображения списка пользовательских строк.

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

Тем не менее, я хочу удалить строку в каждой строке. Я попытался не использовать List и вместо этого использовать ForEach внутри ScrollView но он полностью удаляет все стили, включая его отступы и поля. Я просто хочу удалить строки и ничего больше.

Пожалуйста, помогите, спасибо.

Ответ 1

Добавление UITableView.appearance().separatorColor = .clear в любом месте вашего кода до появления List должно работать. Хотя это решение удаляет разделители, обратите внимание, что все экземпляры List будут привязаны к этому стилю, поскольку в настоящее время нет официального способа удалить только разделители определенных экземпляров. Вы можете запустить этот код в onAppear и отменить его в onDisappear, чтобы сохранить разные стили. Также обратите внимание, что в этом коде предполагается, что Apple использует UITableView для поддержки List, что не всегда может быть правдой. Надеюсь, они добавят официальный API в будущем.

Ответ 2

Я получил подсказку из приведенного выше ответа. Благодарю. Мое решение заключается в следующем.

init() {
   UITableView.appearance().tableFooterView = UIView()
}

var body: some View {
   List {
      ...
   }
}

Ответ 3

Существует UITableView за SwiftUI List для iOS. Таким образом, чтобы удалить

Дополнительные разделители (под списком):

вам нужен tableFooterView и удалить

Все разделители (включая фактические):

вам нужно separatorStyle, чтобы быть .none

init() {
    // 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")
    }
}