将 VStack 移动到页面顶部 swiftUI

问题描述

我想创建一个顶栏,我的代码如下所示:

struct MyView: View {
    var body: some View {
        vstack(alignment: .leading) {
            Bar()
            Spacer()
        }
    }
}

struct Bar: View {
    var body: some View {
        vstack(alignment: .leading,spacing: 0) {
            HStack {
                Spacer()
                Text("Community").comfortaa(weight: .bold,size: 20).foregroundColor(.therameBlack)
                Spacer()
                Button(action: {
                }) {
                    Image(systemName: "gearshape.fill").font(.headline).foregroundColor(.therameBlack)
                }
            }
        }.padding(.leading,5).padding(.trailing,5)
        .padding(.top,(UIApplication.shared.windows.last?.safeAreaInsets.top)! + 10)
    }
}

但是屏幕顶部仍然有间距:

我也尝试过这样做,正如这篇文章中所建议的How to move vstack at top of the screen in swiftui?

struct MyView: View {
    var body: some View {
        vstack {
            vstack(alignment: .leading) {
                TopBar()
                Spacer()
            }
            Spacer()
        }
    }
}

但它没有帮助... 此外,如果我从 .safeAreaInsets 中删除 +10,顶部仍有空间。

解决方法

可能是填充问题。只需删除复杂的填充并添加简单的填充即可。

struct TestView: View {
    var body: some View {
        VStack(alignment: .leading) {
            Bar()
            Spacer()
        }
    }
}


struct Bar: View {
    var body: some View {
        VStack(alignment: .leading,spacing: 0) {
            HStack {
                Spacer()
                Text("Community")
                Spacer()
                Button(action: {
                }) {
                    Image(systemName: "gearshape.fill").font(.headline)
                }
            }.padding()
        }
    }
}

Result in canvas preview

,

我认为如果您删除 .padding(.top,(UIApplication.shared.windows.last?.safeAreaInsets.top)! + 10),它将在屏幕顶部对齐

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...