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

iOS矩形锁屏Widget尺寸调整:消除左右间隙以充分利用空间

解决iOS矩形锁屏Widget左右间隙问题

你的问题核心是两个布局设置导致的左右间隙:全局默认的.padding()会给所有方向添加内边距,以及时间文本冗余的frame设置干扰了布局。按以下方式修改代码即可让内容填满矩形Widget的全部空间:

修改步骤:

  1. 替换全局默认padding:把.padding()改成仅给上下方向设置内边距,避免左右出现间隙。
  2. 移除冗余的frame设置:时间文本不需要frame(maxWidth: .infinity),HStack里的Spacer已经能将其推至右侧。
  3. 强制VStack占满宽度:给VStack添加frame(maxWidth: .infinity),确保整个布局撑满Widget的宽度。

修改后的完整代码:

struct RectangularWidgetView: View {
    var entry: WorldClockProvider.Entry

    var body: some View {
        VStack(alignment: .leading) {
            ForEach(entry.cities.prefix(3), id: \.name) { city in
                HStack {
                    Text(getCityAbbreviation(for: city.name))
                        .font(.system(size:11))
                        .fontWeight(.bold)
                    
                    Spacer()
                    
                    Text(getTime(for: city.timeZone, date: entry.date))
                        .font(.system(size: 9))
                        .fontWeight(.bold)
                }
            }
            Spacer()
        }
        .frame(maxWidth: .infinity)
        .padding(.vertical, 8)
        .widgetAccentable()
    }
}

关键修改说明:

  • .padding(.vertical, 8):仅在上下保留8pt的内边距,左右完全贴合Widget边缘,你可以根据需求调整上下内边距的数值。
  • 移除时间文本的frame(maxWidth: .infinity, alignment: .trailing):这个设置会让时间文本额外占满剩余宽度,和Spacer的作用重复,反而可能导致布局计算异常。
  • .frame(maxWidth: .infinity):确保VStack横向撑满整个Widget的可用空间,让内部的HStack也能从左到右填满宽度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 01:14:56