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
相关产品推荐
相关产品推荐

