iOS矩形锁屏Widget尺寸调整:消除左右间隙以充分利用空间
解决iOS矩形锁屏Widget左右间隙问题
你的问题核心是两个布局设置导致的左右间隙:全局默认的.padding()会给所有方向添加内边距,以及时间文本冗余的frame设置干扰了布局。按以下方式修改代码即可让内容填满矩形Widget的全部空间:
修改步骤:
- 替换全局默认padding:把
.padding()改成仅给上下方向设置内边距,避免左右出现间隙。 - 移除冗余的frame设置:时间文本不需要
frame(maxWidth: .infinity),HStack里的Spacer已经能将其推至右侧。 - 强制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
相关产品推荐
相关产品推荐

