Swiftui Swift UI中垂直居中的文本

Swiftui Swift UI中垂直居中的文本,swiftui,Swiftui,我想把“0美元”放在屏幕中间,但我不知道怎么做。 这是我的代码: var body: some View { NavigationView { ScrollView { VStack(alignment: .center) { Text(String(format: "$%.2f", (dolaresVM.dolares.last?.v)!)) .font(.large

我想把“0美元”放在屏幕中间,但我不知道怎么做。 这是我的代码:

    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)
    }
}

我做错了什么?

正如我们上面讨论的,您不需要ScrollView,就可以在
导航视图中编写
.navigationBarTitle(“Test”)
。这样
NavigationBarTitle
Text($0.00”)
都将显示在您的屏幕上。

这里我把文本的静态值放在这里,您可以用动态值替换它,您可以从您的模型中设置动态值

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")
        }
    }
}

如上所述,您不需要ScrollView,因此可以在
导航视图
中编写
.navigationBarTitle(“测试”)
。这样
NavigationBarTitle
Text($0.00”)
都将显示在您的屏幕上。

这里我把文本的静态值放在这里,您可以用动态值替换它,您可以从您的模型中设置动态值

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")
        }
    }
}

ScrollView
为其子对象提供了无限的内部空间。
VStack
无法占用所有空间。所以
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
提供
idealHeight
也会有所帮助。您可以使用
GeometryReader
获取
滚动视图的“外部”高度:

        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")
            }
        }

ScrollView
为其子对象提供了无限的内部空间。
VStack
无法占用所有空间。所以
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
提供
idealHeight
也会有所帮助。您可以使用
GeometryReader
获取
滚动视图的“外部”高度:

        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")
            }
        }

为什么要向ScrollView添加文本?是否要在ScrollView内的屏幕中间添加文本?您是指标题还是“$0.00”?两者都是需要的。我只是因为标题才添加了ScrollView,没有它它就不会显示。我不知道这是不是一个bug。即使你没有添加scrollview,它也会出现。让我在下面回答!为什么要向ScrollView添加文本?是否要在ScrollView内的屏幕中间添加文本?您是指标题还是“$0.00”?两者都是需要的。我只是因为标题才添加了ScrollView,没有它它就不会显示。我不知道这是不是一个bug。即使你没有添加scrollview,它也会出现。让我在下面回答!非常感谢你!非常感谢你!非常感谢你!非常感谢你!