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

SwiftUI中VStack内LottieSwitch垂直间距过大问题求助

解决SwiftUI中VStack内LottieSwitch组件垂直间隙过大的问题

可能的原因及解决方案:

  • 限制HStack的整体高度
    你的HStack可能因内部元素(如Text行高、LottieSwitch固有尺寸)自动撑开额外高度,即便VStack设了spacing:0,HStack自身的高度冗余仍会导致间隙。给每个HStack添加固定高度的frame:

    HStack {
        // 内部元素...
    }
    .frame(height: 55) // 与LottieSwitch的高度匹配
    .padding(.leading, 20)
    .padding(.trailing, 20)
    
  • 调整LottieSwitch的布局优先级
    给LottieSwitch添加.layoutPriority(1),让它优先占据指定高度,避免Text的布局影响整体HStack高度:

    LottieSwitch(animation: .named("On-Toggle"))
          .isOn($fictionToggleIsOff)
          .onAnimation(fromProgress: 0.5, toProgress: 1.0)
          .offAnimation(fromProgress: 0.0, toProgress: 0.5)
          .frame(height: 55)
          .layoutPriority(1)
    
  • 检查LottieSwitch内部的默认padding
    部分第三方Lottie开关组件可能自带内部垂直padding,可尝试用.padding(.vertical, 0)强制覆盖:

    LottieSwitch(animation: .named("On-Toggle"))
          // 其他修饰符...
          .padding(.vertical, 0)
    
  • 优化VStack的布局约束
    给VStack添加.alignment(.leading)并结合.fixedSize(horizontal: false, vertical: true),强制VStack仅根据子视图的实际所需高度布局:

    VStack(spacing: 0, alignment: .leading) {
        // 两个HStack...
    }
    .fixedSize(horizontal: false, vertical: true)
    

修改后的完整示例代码:

VStack(spacing: 0, alignment: .leading) {
    HStack {
        Text("XXX")
            .fontAndColorModifier(size: 16, color: .white, fontWeight: "Poppins-Medium")
        LottieSwitch(animation: .named("On-Toggle"))
              .isOn($fictionToggleIsOff)
              .onAnimation(fromProgress: 0.5, toProgress: 1.0)
              .offAnimation(fromProgress: 0.0, toProgress: 0.5)
              .frame(height: 55)
              .layoutPriority(1)
        Spacer(minLength: 10)
        Text("XXX")
            .fontAndColorModifier(size: 16, color: .white, fontWeight: "Poppins-Medium")
        LottieSwitch(animation: .named("On-Toggle"))
              .isOn($nonfictionToggleIsOff)
              .onAnimation(fromProgress: 0.5, toProgress: 1.0)
              .offAnimation(fromProgress: 0.0, toProgress: 0.5)
              .frame(height: 55)
              .layoutPriority(1)
    }
    .frame(height: 55)
    .padding(.horizontal, 20)
    
    HStack {
        Text("XXX")
            .fontAndColorModifier(size: 16, color: .white, fontWeight: "Poppins-Medium")
        LottieSwitch(animation: .named("On-Toggle"))
              .isOn($paperbackToggleIsOff)
              .onAnimation(fromProgress: 0.5, toProgress: 1.0)
              .offAnimation(fromProgress: 0.0, toProgress: 0.5)
              .frame(height: 55)
              .layoutPriority(1)
        Spacer(minLength: 10)
        Text("XXX")
            .fontAndColorModifier(size: 16, color: .white, fontWeight: "Poppins-Medium")
        LottieSwitch(animation: .named("On-Toggle"))
              .isOn($hardcoverToggleIsOff)
              .onAnimation(fromProgress: 0.5, toProgress: 1.0)
              .offAnimation(fromProgress: 0.0, toProgress: 0.5)
              .frame(height: 55)
              .layoutPriority(1)
    }
    .frame(height: 55)
    .padding(.horizontal, 20)
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 02:42:46