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

SwiftUI添加Spacer后View宽度约束失效,按钮超出安全区域无限扩展问题求助

SwiftUI添加Spacer后View宽度约束失效,按钮超出安全区域无限扩展问题求助

我碰到一个百思不得其解的Bug:在视图容器中间加了个Spacer之后,右侧的按钮直接疯长,无限扩展到安全区域以外——连动态岛下方的区域都被覆盖,一直延伸到屏幕边缘,完全无视安全区域的限制。

两种场景对比:

  • 保留Spacer时:按钮尺寸异常膨胀,突破安全区域边界(对应截图1)
  • 注释掉Spacer后:按钮立刻恢复正常大小(对应截图2)

对应的视图代码如下:

struct FighterView: View {

@Bindable var fighter: Fighter

var body: some View {
    
    HStack {
        
        TextField("", text: $fighter.name, prompt: Text(fighter.color.rawValue).foregroundStyle(Color.black.opacity(0.1)))
            .myModifiers
        
        ZStack {
            // 这些视图在截图中不可见

            PenaltyView(color: fighter.isHansokumake ? .jSred : .jSyellow)
                .hidden(fighter.shido == 0 && !fighter.isHansokumake)
            
            PenaltyView(isTilted: true)
                .offset(x: 15, y: 0)
                .hidden(fighter.shido != 2 || fighter.isHansokumake)
            
        }
        
        // 就是这个Spacer,注释掉它按钮就正常了
        Spacer()

        DoubleTapButton(tapAction: {
            
            fighter.isIppon = true
            
        }, doubleTapAction: {
            
            fighter.isIppon = false
            
        }, title: fighter.ipponString)
        .buttonStyle(PointButtonStyle())

        DoubleTapButton(tapAction: {
            
            fighter.addWazaari()
            
        }, doubleTapAction: {
            
            fighter.removeWazaari()
            
        }, title: "\(fighter.isIppon ? 0 : fighter.wazaari)")
        .buttonStyle(PointButtonStyle())
    }
    .foregroundStyle(fighter.color.primary)
}
}

我这项目都快收尾了,唯独这个问题卡壳好久,有没有大佬能给点提示或者解决思路呀?

备注:内容来源于stack exchange,提问作者C. Moulinet

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 10:09:31