SwiftUI: как удалить отступ между представлениями в VStack?

Используя SwiftUI, я создал VStack, который содержит некоторые фиксированные элементы и элемент списка. Причина в том, что пользователь должен прокручивать только область под фиксированными элементами. Теперь я вижу пробел между вторым фиксированным элементом и списком. Я не знаю, откуда это пространство, и хочу от него избавиться, но понятия не имею, как. Область отмечена красным.

struct DashboardView : View, CoreDataInjected {

    var body: some View {
        GeometryReader { geometry in
            VStack {
                ScopeSelectorView().frame(maxWidth: .infinity).background(ColorPalette.gray)
                BalanceNumberView().frame(maxWidth: .infinity)
                List {
                    DashboardNavigationView(
                        height: geometry.size.height - ScopeSelectorView.height - BalanceNumberView.height
                    ).frame(maxWidth: .infinity).listRowInsets(.zero)
                }
            }
        }.background(Color.red).edgesIgnoringSafeArea(.all)
    }
}

4 ответа

Решение

Поскольку вы не прошли spacing аргумент VStack, он выбирает интервал по умолчанию в зависимости от контекста. Если вам не нужен интервал, укажите 0 явно.

VStack(spacing: 0) {
    // content here
}

Я использую это,

.padding(.top, -8)

Подробнее здесь,

VStack(spacing: 0) {
   List { ...
   }
   VStack{ ... }.padding(.top, -8)
}

Отдельно

Ты можешь использовать offset модификатор для любого вида, чтобы он выглядел по-разному для каждого контента отдельно:

VStack {
    Circle()
    Circle().offset(x: 0, y: -20)
    Circle().offset(x: 0, y: 40)
}

Обратите внимание, что он может быть отрицательным в обоих направлениях.


Все сразу

Также VStack а также HStack иметь аргумент под названием spacing и вы можете установить его на 0 или любое другое число, которое необходимо применить ко всем элементам.

VStack(spacing: 0) {
    Circle()
    Circle()
}

Обратите внимание, что при необходимости он может быть отрицательным.

Например, вам нужно передать аргумент пробела в V Stack...

      VStack(spacing: 0) {
    Text("list one")
        .padding()
    Text("list one")
        .padding()
}

Другие вопросы по тегам