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 不居中对象的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI:VStack中的VStack,标签被截断

是否可以在 Swift UI 中获得 VStack 的计算“最小”高度

SwiftUI一日速成

Xcode 和 Swift UI 中是不是存在导致不相关错误的已知错误?

SwiftUI 填充距离不一致

Swift UI设置制作矩形正方形