我希望“ $ 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)
}
}
我在做什么错了?
答案 0 :(得分:2)
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")
}
}
为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")
}
}
答案 1 :(得分:1)
如上所述,您不需要ScrollView,因此可以在.navigationBarTitle("Test")
内编写NavigationView
。这样NavigationBarTitle
和Text("$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")
}
}
}