在 Swift UI 中垂直居中文本

Nac*_*t93 1 swiftui

在此处输入图片说明

我希望“$ 0.00”位于屏幕中间,但我不知道该怎么做。

这是我的代码:

    var body: some View {
    NavigationView {
        ScrollView {
            VStack(alignment: .center) {
                Text(String(format: "$%.2f", (dolaresVM.dolares.last?.v)!))
                    .font(.largeTitle)
            }.frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity)
            .edgesIgnoringSafeArea(.all)



        }.navigationBarTitle("Test")
            .onAppear(perform: self.dolaresVM.fetchDolares)
    }
}
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

exx*_*ain 5

ScrollView给孩子们无限的内在空间。在VStack不能把所有这些空间。SoVStack的高度由其内容定义(在我们的例子中 - Text)。没有ScrollView它会像你想要的那样工作:

       var body: some View {
        NavigationView {
            VStack(alignment: .center) {
                Text(String(format: "$%.2f", 0)).font(.largeTitle)
            }.frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity)
            .edgesIgnoringSafeArea(.all)
            .navigationBarTitle("Test")
        }
    }
Run Code Online (Sandbox Code Playgroud)

提供idealHeight这些VStack也会有帮助。您可以使用GeometryReader来获取“外部”高度ScrollView

        NavigationView {
            GeometryReader { geometry in
                ScrollView {
                    VStack(alignment: .center) {
                        Text(String(format: "$%.2f", 0)).font(.largeTitle)
                    }.frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, idealHeight: geometry.size.height, maxHeight: .infinity)
                        .edgesIgnoringSafeArea(.all)
                }.navigationBarTitle("Test")
            }
        }
Run Code Online (Sandbox Code Playgroud)