WatchOs 上不显示 ScrollView 内的列表
Posted
技术标签:
【中文标题】WatchOs 上不显示 ScrollView 内的列表【英文标题】:List inside ScrollView is not displayed on WatchOs 【发布时间】:2019-10-11 04:20:37 【问题描述】:我在滚动视图中有一个列表,它没有显示在图像和按钮下方。我还尝试将列表和其他项目放在 VStack 中,这样我就可以看到列表中的一项,而不是滚动图像和按钮来显示整个列表。
ScrollView
Image(uiImage: self.image)
.resizable()
.frame(width: 80, height: 80)
.scaledToFit()
Text("\(name)")
.lineLimit(2)
HStack
Button(action:
print("button1")
)
Image(systemName: "pencil")
Button(action:
print("button 2")
)
Image(systemName: "trash")
List
ForEach(self.items, id: \.self) item in
VStack
Text(item.name)
.font(.headline)
.lineLimit(1)
Text(item.subname)
.font(.subheadline)
.lineLimit(1)
.navigationBarTitle(Text("Tittle"))
.edgesIgnoringSafeArea(.bottom)
我还尝试将.frame( minHeight: 0, maxHeight: .infinity)
添加到列表中以强制它具有整个高度,但这也不起作用。有什么建议吗?或者这可能是一个 swiftUI 错误?
编辑
我刚刚意识到滚动时出现此错误:
APPNAME Watch Extension[336:60406] [detents] could not play detent NO, 2, Error Domain=NSOSStatusErrorDomain Code=-536870187 "(null)", (
Gain = "0.01799999922513962";
OutputType = 0;
SlotIndex = 4;
,
Gain = "0.6000000238418579";
OutputType = 1;
SlotIndex = 5;
)
【问题讨论】:
【参考方案1】:为您的列表指明一些高度,例如
List
ForEach(self.items, id: \.self) item in
VStack
Text(item.name)
.font(.headline)
.lineLimit(1)
Text(item.subname)
.font(.subheadline)
.lineLimit(1)
.frame(minHeight: 200, maxHeight: .infinity)
【讨论】:
【参考方案2】:您是否尝试过将List
放入GeometryReader
并在那里设置frame
?
【讨论】:
我尝试将`List` 放在GeometryReader
中,但没有成功,只出现了半行并且图像、文本和HStack 不滚动。我还尝试将 Image、Text 和 HStack 与几何阅读器中的 List 放在一起,但它也不起作用,而且似乎还会产生更多问题(即图像文本和按钮都在奇怪的地方)。【参考方案3】:
我在使用 UIKit 时遇到了同样的错误。错误消息与触觉反馈有关,请参阅here。
它说无法播放触觉反馈,可能是类型 2,即directionDown
,请参阅here。
由于我的代码没有调用play(_:)
,所以必须由watchOS自己调用。
错误的原因可能是滚动速度非常快,这可能导致对play(_:)
的调用过于频繁而无法正确处理。文档说:
不要快速连续多次调用此方法。如果 当您调用此方法时,触觉引擎已经启动,系统 停止电流反馈并施加 100 的最小延迟 在启动引擎以生成新反馈之前的毫秒数。
如果这真的是 watchOS 的影响,我想你不能做任何事情来避免错误。
【讨论】:
以上是关于WatchOs 上不显示 ScrollView 内的列表的主要内容,如果未能解决你的问题,请参考以下文章
ScrollView 中的 ListView 在 Android 上不滚动
ScrollView内嵌套ListView时的显示与滑动问题