SwiftUI VStack 不居中对象
Posted
技术标签:
【中文标题】SwiftUI VStack 不居中对象【英文标题】:SwiftUI VStack not center objects 【发布时间】:2020-09-10 11:28:32 【问题描述】:我不知道为什么,但 VStack 不会突然居中图像或文本。我尝试使用VStack(alignment:.center)
,但没有成功。
struct ContentView: View
var body: some View
NavigationView
GeometryReader geo in
Group
VStack()
Image(systemName: "car.fill")
我的理解是这应该居中。至少所有文件都说它应该居中。
【问题讨论】:
【参考方案1】:它以VStack
为中心,但VStack
不以GeometryReader
为中心。您可以执行以下操作...
GeometryReader geo in
VStack
Image(systemName: "car.fill")
.frame(width: geo.size.width, height: geo.size.height)
【讨论】:
是否有文档说明为什么 GeometyReader 会发生这种情况?还是其他事情也会发生这种情况?最佳实践是否应该总是说您应该在 VStack 或任何对象上放置一个框架?很抱歉这些问题,只是想了解为什么这个答案有效。 GeometryReader 没有自己的对齐方式,它只是一个free space
,左上角有 0,0,所以你可以随心所欲地填充它,如果你想填充它完全有一些对齐,制作一些需要对齐的 *stack,如果你想通过坐标在其中自定义对齐,你可以使用 .position 使用过的视图等来做到这一点。
我的问题不完全是这个,但这也解决了我的居中问题!谢谢!所以我只有一个带有 VStack 的视图,并且在一个带有两个 Spacer 的图像内。即使禁用状态栏和忽略安全区域,VStack 似乎也无法正确获得屏幕全尺寸!【参考方案2】:
只需使用 HStack 将 VStack 居中。
struct ContentView: View
var body: some View
NavigationView
GeometryReader geo in
Group
HStack
Spacer()
VStack()
Image(systemName: "car.fill")
Spacer()
或
struct ContentView: View
var body: some View
NavigationView
GeometryReader geo in
Group
VStack()
HStack
Spacer()
Image(systemName: "car.fill")
Spacer()
【讨论】:
以上是关于SwiftUI VStack 不居中对象的主要内容,如果未能解决你的问题,请参考以下文章
是否可以在 Swift UI 中获得 VStack 的计算“最小”高度