VStack中不同的垂直对齐方式

Posted

技术标签:

【中文标题】VStack中不同的垂直对齐方式【英文标题】:Different vertical alignment in VStack 【发布时间】:2021-05-28 07:30:52 【问题描述】:

我的目标是使Text("Headline") 位于图像顶部的同一级别,Divider() 位于图像底部的同一级别,而不会丢失它们之间的内容空间。我尝试了 VStack 和 HStack、.frame.alignmentGuide 的默认对齐方式,但没有什么对我没有帮助。我避免在 VStack 中使用 Spacer(),因为它会占用空间并且 Text("Add info") 中的内容丢失。

    HStack 
        Image("temp 1")
            .resizable()
            .frame(width: 120, height: 120)

            
        VStack(alignment: .leading, spacing: 4) 
            Text("Headline")
                .font(.title2)
                .fontWeight(.semibold)

            Text("Subheadline")
                .font(.subheadline)
                .foregroundColor(.secondary)
            Text("Add info: This Divider should be on bottom of Vstack")
                .font(.subheadline)
                .fontWeight(.regular)

            Divider()
        
    
    .padding(16)

How it should be

图片上的第1行是Text("Headline")应该在的位置,第2行是Divider()的位置

【问题讨论】:

你能分享你想要的输出截图吗?不清楚你到底想要什么。 能否分享所需输出的附件? 添加了一张图片,希望看起来更清晰 【参考方案1】:

经过测试。完美运行:

        HStack(spacing: 0) 
            Image("fox")
                .resizable()
                .frame(width: 120, height: 120) // here
                .padding(.trailing, 4)

            VStack(alignment: .leading, spacing: 0) 
                Text("Headline")
                    .font(.title2)
                    .fontWeight(.semibold)
                
                Spacer(minLength: 4)

                Text("Subheadline")
                   .font(.subheadline)
                   .foregroundColor(.secondary)

                Spacer(minLength: 4)

                Text("Add info: This Divider should be on bottom of Vstack")
                   .font(.subheadline)
                   .fontWeight(.regular)

                Spacer().frame(height: 4)
                
                Divider()
           
           .frame(height: 120)
        

【讨论】:

哦,我觉得我的图片有点不理解,我不想在顶部和底部添加矩形,我想在这些地方精确定位视图 @Nizami 立即尝试 不是解决方案: 1. 添加 .frame (width: metrics.size.width * 0.33) 会破坏所需的图像尺寸并将其拉伸到全屏 2. 分隔线不在图像底部的同一级别(走出屏幕) 已修复。做了你想做的一切。一切正常,附上截图。 我刚刚删除了 Text Views 之间的 Spacer,并在 Divider() 之前留下了 Spacer(minLength: 4)。完美,谢谢!

以上是关于VStack中不同的垂直对齐方式的主要内容,如果未能解决你的问题,请参考以下文章

使用不同字体调整 FL_Widget 中文本的垂直对齐方式

图像垂直对齐问题

SwiftUI 中的布局与水平和垂直对齐

即使大于高度,如何将 VStack 对齐到顶部?

设置BOXlayout的对齐方式

CSS制作水平垂直居中对齐 多种方式各有千秋