Screen Time API:DeviceReportActivity视图高度无法适配内容求助
解决DeviceActivityReportView无法自动适配内容高度的问题
针对你遇到的「固定高度能正常显示、自适应高度失效」的问题,可通过以下几种方式解决:
1. 移除固定高度约束并给VStack添加自适应修饰符
首先去掉调用时的固定高度,然后在你的TotalReportActivityView的VStack上添加fixedSize(horizontal: false, vertical: true),强制垂直方向根据内容计算高度:
修改后的TotalReportActivityView代码:
var body: some View { VStack(spacing: 5) { ForEach(configuration.totalUsageByCategory.filter { $0.totalAppUsage > 60 }) { appContent in HStack { Label(appContent.token) .imageScale(.medium) .labelStyle(.iconOnly) .scaleEffect(1.5) Text(appContent.name) .font(ZFont.default) Spacer() Text(self.formatter.string(from: appContent.totalAppUsage) ?? "No data") .font(ZFont.default) .foregroundStyle(Color(hex: "#7E7B93")) } .padding(.horizontal, 8) .padding(.vertical, 4) .contentShape(RoundedRectangle(cornerRadius: 8)) } } .fixedSize(horizontal: false, vertical: true) // 关键修饰符 }
主App调用代码简化为:
DeviceActivityReportView()
2. 条目过多时用ScrollView包裹
如果过滤后的条目数量可能超出屏幕高度,用ScrollView包裹VStack,既保留自适应高度特性,又支持滚动查看全部内容:
var body: some View { ScrollView { VStack(spacing: 5) { ForEach(configuration.totalUsageByCategory.filter { $0.totalAppUsage > 60 }) { appContent in // 原有HStack内容不变 } } } }
3. 确认数据加载时机
如果configuration.totalUsageByCategory是异步加载的,确保数据加载完成后再渲染视图。可通过.task或onAppear触发数据加载,避免初始空数据导致视图高度为0。
内容的提问来源于stack exchange,提问作者Sandor Ferreira
相关产品推荐
相关产品推荐

