SwiftUI:如何在VStack中删除视图之间的边距?

tos*_*osi 1 swiftui vstack

使用SwiftUI,我创建了一个VStack,其中包含一些固定元素和一个list元素。原因是,用户仅应滚动固定元素下方的区域。现在,我看到第二个固定元素和列表之间有一个空格。我不知道这个空间是从哪里来的,并想摆脱它,但是不知道如何。该区域标记为红色。

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)
    }
}
Run Code Online (Sandbox Code Playgroud)

视图的屏幕截图

rob*_*off 7

由于您没有将spacing参数传递给VStack,因此它将根据上下文选择默认间距。如果您不希望有空格,则显式传递0。

VStack(spacing: 0) {
    // content here
}
Run Code Online (Sandbox Code Playgroud)

  • 即使我添加“间距:0”,空间仍然存在。 (2认同)
  • @BollMose 也许你的子视图正在定义上方或下方的空间? (2认同)

Moj*_*ini 6

分别

您可以offset在任何视图上使用修饰符,使每个内容分别看起来不同:

VStack {
    Circle()
    Circle().offset(x: 0, y: -20)
    Circle().offset(x: 0, y: 40)
}
Run Code Online (Sandbox Code Playgroud)

请注意,它可能在两个方向上都是负数。


一次全部

此外,VStackHStack调用一个参数spacing,您可以将其设置为0或任何其他数字,您需要将其应用于所有元素。

VStack(spacing: 0) {
    Circle()
    Circle()
}
Run Code Online (Sandbox Code Playgroud)

请注意,如果需要 is 可能为负。


Bol*_*ose 5

我用这个,

.padding(.top, -8)
Run Code Online (Sandbox Code Playgroud)

更详细的在这里,

VStack(spacing: 0) {
   List { ...
   }
   VStack{ ... }.padding(.top, -8)
}
Run Code Online (Sandbox Code Playgroud)