tvOS中SwiftUI List无法滚动到底部的问题咨询
我之前在Apple TV平台开发SwiftUI应用时,也碰到过类似的List滚动到底部的问题,结合你的代码和尝试的方法,给你几个实用的排查方向:
先移除手动添加的
.focusable(true)
SwiftUI的List在Apple TV上已经默认实现了焦点管理和滚动交互,给整个List或者每行手动设置.focusable(true)反而可能干扰系统的默认行为。你可以先把这两处的.focusable(true)都去掉,再测试滚动是否正常。检查List的容器布局约束
确保List所在的父视图没有限制它的高度,比如是否正确填充了屏幕空间。可以尝试给List添加.edgesIgnoringSafeArea(.all),或者用GeometryReader包裹List,确认它的可用空间是全屏的:GeometryReader { geo in List(self.someData) { data in SomeListRow(data: data) } .frame(width: geo.size.width, height: geo.size.height) .shadow(radius: 5) }排查
SomeListRow的内部布局
如果行内的元素高度超出了预期,或者包含了不可见的占位内容,会导致List计算的滚动范围出现偏差。你可以给SomeListRow添加一个背景色(比如.background(Color.red.opacity(0.2))),直观查看每行实际占用的空间,确认没有超出List的可视区域。测试强制滚动到最后一行
用ScrollViewReader强制滚动到最后一行,判断是滚动机制问题还是焦点导航问题:ScrollViewReader { proxy in List(self.someData, id: \.self) { data in SomeListRow(data: data) } .shadow(radius: 5) .onAppear { if let lastItem = someData.last { proxy.scrollTo(lastItem, anchor: .bottom) } } }如果强制滚动能到达底部,说明是焦点导航的问题;如果还是不行,那大概率是布局约束导致的滚动范围错误。
暂时移除阴影效果测试
你给List添加了.shadow(radius:5),虽然阴影本身不应该影响滚动,但有时候视图渲染层级的问题可能意外拦截手势。可以先去掉阴影,看看滚动是否恢复正常,再逐步排查。
内容的提问来源于stack exchange,提问作者K-2SO

