Swiftui Swift UI中垂直居中的文本
我想把“0美元”放在屏幕中间,但我不知道怎么做。 这是我的代码: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
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,它也会出现。让我在下面回答!非常感谢你!非常感谢你!非常感谢你!非常感谢你!