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

SwiftUI中Text与Stepper间的Spacer()为何无法生效?

问题:Text与Stepper之间的Spacer()为何无法正常工作?

我在下方代码里给Text和Stepper之间加了Spacer(),但没实现预期的两端对齐效果。

当前显示效果:
当前显示效果

期望显示效果:
期望显示效果

代码如下:

import SwiftUI

struct FontEditView: View {
    @Binding var fontSize: CGFloat
    
    var body: some View {
        NavigationStack {
            Form {
                HStack {
                    Text("Font Size")
                    Spacer()
                    Stepper(fontSize.formatted(), value: $fontSize, in: 5...50)
                }    
            }
        }
    }
}

struct FontEditView_Previews: PreviewProvider {
    static var previews: some View {
        FontEditView(fontSize: .constant(20))
    }
}
解答

这是因为SwiftUI的Form会对内部视图的布局做默认适配,Stepper在Form容器里默认会尽可能占据水平空间,直接把Spacer()的拉伸效果给覆盖了。

给你两种解决办法:

  • 方法一:给Stepper添加fixedSize()修饰符
    让Stepper只占用自身内容所需的空间,这样Spacer()就能正常把Text和Stepper推到两端:
HStack {
    Text("Font Size")
    Spacer()
    Stepper(fontSize.formatted(), value: $fontSize, in: 5...50)
        .fixedSize()
}
  • 方法二:调整布局优先级
    给Text设置更高的布局优先级,让它先占据需要的空间,剩下的空间留给Spacer()和Stepper:
HStack {
    Text("Font Size")
        .layoutPriority(1)
    Spacer()
    Stepper(fontSize.formatted(), value: $fontSize, in: 5...50)
}

两种方法都能实现你要的左右分布效果,第一种更直接,推荐优先试试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 01:45:36