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

watchOS开发:SwiftUI List嵌入ScrollView后内容不显示问题

问题根因

watchOS 平台的 SwiftUI 中,List 组件本身自带滚动容器属性,和iOS端表现存在差异:禁止将List嵌套在ScrollView内部使用。
嵌套场景下系统无法正确计算List的内容高度,最终会出现List区域实际高度为0、仅靠外层padding撑出空白、内部行内容完全不渲染的问题,和你当前运行的表现完全匹配。

修复步骤
  • 删掉包裹所有内容的ScrollView容器,List本身就支持滚动,完全可以替代ScrollView的能力。
  • 原本放在ScrollView里的顶部固定文本(比如示例里的"Hello World"),直接放到List内部作为普通列表行即可,不需要额外容器。
  • 移除List外层多余的.padding(),watchOS端的List默认已经适配了屏幕安全边距,额外加内边距会导致内容偏移、布局错乱。
修复后可直接运行的代码示例
struct MainMenuListView: View {
    var body: some View {
        NavigationView {
            List {
                // 顶部固定展示文本
                Text("Hello World")
                    .listRowPlatterColor(.clear)
                
                // 基础文本行
                Text("item.name")
                    .font(.headline)
                    .listRowInsets(EdgeInsets(top: 0, leading: 0, bottom: 0, trailing: 0))
                    .listRowPlatterColor(.clear)
                
                // 自定义按钮行,内置左图右文布局参考
                Button(action: {}) {
                    HStack(spacing: 8) {
                        // 左侧图片位置
                        Image(systemName: "list.bullet")
                            .resizable()
                            .scaledToFit()
                            .frame(width: 20, height: 20)
                        // 右侧文本位置
                        Text("Testing Testing")
                    }
                }
                .buttonStyle(BtnStyle(bgColor: .red, fgColor: .white))
                .listRowInsets(EdgeInsets(top: 0, leading: 0, bottom: 0, trailing: 0))
                .listRowPlatterColor(.clear)
            }
            .navigationTitle("Sample Application")
        }
    }
}

后续要实现全量的左图右文列表行,只需要在每一行的内容视图里用HStack横向排列图片和文本,调整尺寸、间距参数即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 01:42:17