我希望“$ 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)
我究竟做错了什么?
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)