在Swift UI中垂直居中文本

问题描述 投票:0回答:2

enter image description here

我希望“ $ 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)
    }
}

我在做什么错?

swiftui
2个回答
0
投票

ScrollView对于儿童具有无限的内部空间,因此VStack的高度将由其内容(在本例中为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")
        }
    }

也可以为VStack提供固定的高度。


0
投票

如上所述,您不需要ScrollView,因此可以在.navigationBarTitle("Test")中写入NavigationView。这样NavigationBarTitleText("$0.00")都将显示在屏幕上。

这里输入了Text的静态值,您可以将其替换为您通过Model设置的动态值。

struct ContentView: View {
    var body: some View {

        NavigationView {

            VStack(alignment: .center) {
                Text("$0.00")
                    .font(.largeTitle)
            }
            .frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity)
            .edgesIgnoringSafeArea(.all)
            .navigationBarTitle("Test")
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.