Удалите лишние разделители под списком в SwiftUI

Я создал простой List как показано ниже, но под ним есть дополнительные разделители.

List {
  Text("Item 1")
  Text("Item 2")
  Text("Item 3")
}

Результат:

enter image description here

Я попытался VStack List в VStack и добавить Spacer() как VStack ниже, но он не работает должным образом. Удаляет около половины пустых клеток.

VStack{
  List {
    Text("Item 1")
    Text("Item 2")
    Text("Item 3")
  }
  Spacer()
}

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

Ответы

Ответ 1

Это не идеальное решение, но вы можете использовать ScrollView, где каждая ячейка создается с помощью вызова ForEach, а разделители создаются с помощью Divider().

Изменение: я говорил с инженерами Apple на WWDC об этом. Они слышали много отзывов относительно удаления/замены разделителей. Тем не менее, пока мой ответ выше является их рекомендацией.

Ответ 2

Не идеальное решение, но вы можете создать стиль списка .grouped помощью .listStyle(.grouped) который удаляет все пустые ячейки, которые могут появиться ниже.

Ответ 3

Добавление белого прямоangularьника в качестве нижнего колонтитула и с 0 EdgeInsets работало для меня:

struct Footer: View {
    var body: some View {
        Rectangle()
            .foregroundColor(.white)
            .listRowInsets(EdgeInsets())
    }
}

struct Timeline : View {
    var body: some View {
        List {
            Section(footer: Footer()) {
                Text("Item 1")
                Text("Item 2")
                Text("Item 3")
            }
        }
    }
}

Единственная проблема в том, что он также добавляет заголовок, и я не уверен, как от него избавиться.

enter image description here

Ответ 4

Вы можете добавить это для удаления разделителя.

UITableView.appearance().separatorColor = .clear

Ответ 5

Здесь один из способов.

List {
         Section(footer: Text(""))) {
                Text("One")
                Text("Two")
                Text("Three")
            }
     }

Вместо представления "Текст" в нижнем колонтитуле вы можете создать свой собственный. Примечание. -I пытался использовать EmptyView(), но это фактически не удаляет избыточные разделители.

Ответ 6

Два способа сделать это

================================================== ======

struct ContentView: View {

var body: some View {

    List {
            Text("One")
            Text("Two")
            Text("Three")
    }.listStyle(.grouped)
}

}

================================================== ======

struct ContentView: View {

var body: some View {

    List {
        Section(header: Text("Header"), footer: Text("Footer")) {
            Text("One")
            Text("Two")
            Text("Three")
        }
    }
}

}

Я рекомендую стиль сгруппированного списка

Ответ 7

Используйте .listStyle(GroupedListStyle()), который удаляет все пустые ячейки, которые могут появиться ниже.

   List {
          Text("Item 1")
          Text("Item 2")
          Text("Item 3")
        }.listStyle(GroupedListStyle())

enter image description here

Ответ 8

Попробуйте это, если вы хотите использовать раздел, там все еще виден нижний колонтитул с этим:

List {
    Section(footer: Text("")) {
        Text("My text")
    }
    EmptyView()
}

enter image description here

Я придумал хакерский способ скрыть нижний колонтитул, если у вас нет раздела:

List {
    Text("Item 1")
    Text("Item 2")

    // Adding empty section with footer
    Section(footer:
        Rectangle()
            .foregroundColor(.clear)
            .background(Color(.systemBackground))){EmptyView()}
            .padding(.horizontal, -15)
}

enter image description here

Ответ 9

Нет необходимости в стиле Section или .grouped!

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

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

вам нужен 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")
    }
}

Обратите внимание, что устраняет все разделители таблиц/списков. Таким образом, вы можете переключать его такими способами, как onAppear() и т.д. По своему усмотрению.