如何居中水平图像列表SwiftUI

Posted

技术标签:

【中文标题】如何居中水平图像列表SwiftUI【英文标题】:How to centering horizontal Image list SwiftUI 【发布时间】:2021-05-27 21:49:07 【问题描述】:

如果我的后端服务器向我发送的图像图标少于 7 个,我想将我的水平社交媒体图像列表居中。如果我收到 7 个社交媒体图标,它看起来不错,但如果我收到 2、3 或 5 个图标,我想显示它们始终处于中心位置。我的意思是;

在第二张图片中,您可以看到它们看起来是分开的,但我想将它们显示在中心位置,就像在一起一样。我该怎么做?

这是我的代码;

 HStack(alignment:.center,spacing : 0) 
            
            ForEach(data.options ?? [] , id:\.id)  item in
                
                    if item.icon != nil 
                        
                        Image(uiImage:(item.icon ?? "").load())
                            .resizable()
                        
                     else 
                        
                        GeometryReader  geometry in
                                     Image(item.type ?? "")
                                        .resizable()
                                        .frame(width:UIScreen.main.bounds.width * 0.065,alignment:.center)
                                        .frame(width:geometry.size.width / 1,height:25,alignment:.center)
                                
                                
                            
                        .padding(EdgeInsets(top: 0, leading: 0, bottom: UIScreen.main.bounds.height * 0.050, trailing: 0))
                        
                    
                
            

【问题讨论】:

【参考方案1】:

我无法重播您的数据项,您没有共享该结构,但它以这种方式工作:

struct Icon: Identifiable, Hashable 
    var name: String
    var icon: Image? return Image(name)
    public var id:String return self.name


struct ContentView: View 
    
    @State var icons: [Icon] = [Icon(name:"1")]
    @State var prog = 1
    var body: some View 
        
        VStack 
            Button(action: 
                prog += 1
                icons.append(Icon(name:String(prog)))
            , label: 
                Text("Add")
            )
            Button(action: 
                prog -= 1
                icons.removeLast()
            , label: 
                Text("Remove")
            )
            HStack(alignment:.center,spacing : 0) 

                ForEach(icons, id:\.self)  item in

                    if item.icon == nil 

                        EmptyView()

                    
                    else 
                        
                        item.icon!
                            .resizable()
                            .frame(width:UIScreen.main.bounds.width * 0.085,height:UIScreen.main.bounds.width * 0.085,alignment:.center)
                            .padding(6)
                    
                
            
        
    


struct ContentView_Previews: PreviewProvider 
    static var previews: some View 
        ContentView()
    

【讨论】:

【参考方案2】:

您是否尝试过在每一侧添加一个 Spacer()?在 ForEach 语句之前添加一个,在 ForEach 语句之后添加另一个。我认为这会使它们更靠近。

所以:

HStack 
    Spacer()

    ForEach 
       Code
    

    Spacer()

【讨论】:

没用。实际上它显示在一起,但所有宽度的 2 个图标,因为这些图标看起来很大。 您可以调整图标大小,但没有其他修饰符。如果您添加限制其大小的内容(例如 .frame(height:50),这可能会有所帮助。

以上是关于如何居中水平图像列表SwiftUI的主要内容,如果未能解决你的问题,请参考以下文章

如何在响应式页面上的 div 内垂直和水平居中两个图像

CSS:如何使水平列表居中?显示:内联不工作

如何水平居中未知宽度的无序列表?

在另一个没有尺寸的情况下垂直/水平居中图像

将高度变化的图像水平居中而不扭曲图像

在 Bootstrap Grid 中垂直和水平居中图像