You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI如何让VStack中红矩形水平居中且绿圆贴其左边缘

可以借助Alignment Guides实现需求,全程无需硬编码任何位置数值,修改后的完整代码如下:

import SwiftUI

// 自定义水平对齐标识
extension HorizontalAlignment {
    private enum RedRectCenterAlignment: AlignmentID {
        static func defaultValue(in context: ViewDimensions) -> CGFloat {
            context[.center]
        }
    }
    static let redRectCenter = HorizontalAlignment(RedRectCenterAlignment.self)
}

struct AlignmentTest: View {
    @State var op: Double = 1
    
    var body: some View {
        // VStack使用自定义对齐作为水平对齐基准
        VStack(alignment: .redRectCenter) {
            HStack(spacing: 0) { // spacing设为0保证圆形和矩形无间隙紧贴
                Circle()
                    .fill(.green)
                    .opacity(op)
                    .frame(width: 50, height: 50)
                
                Rectangle()
                    .fill(.red)
                    .frame(width: 150, height: 50)
                    // 指定红色矩形的水平中心为自定义对齐的基准点
                    .alignmentGuide(.redRectCenter) { dimensions in
                        dimensions[HorizontalAlignment.center]
                    }
            }
        }
    }
}

实现逻辑

  • 自定义水平对齐规则,默认取值为视图自身的水平中心
  • 将VStack的水平对齐方式设置为自定义规则,所有子视图都会按照该规则完成对齐
  • 给红色矩形添加对齐引导,指定它的水平中心为对齐基准点,VStack会自动将该基准点与自身的水平中心对齐,实现红色矩形在VStack内水平居中
  • HStack默认采用leading对齐,将间距设为0后绿色圆形会自动紧贴红色矩形的左边缘

该方案适配性极强,后续如果调整圆形、矩形的尺寸,布局效果会自动适配,不需要修改任何布局逻辑。

内容的提问来源于stack exchange,提问作者zumzum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 01:24:04