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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 19:30:55