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 在 IOS7 上不滚动

react-native使用Swiper在安卓上不显示

ScrollView内嵌套ListView时的显示与滑动问题

ViewPager 中片段内的 ScrollView 内的 Horizo​​ntalListView

片段内的片段不能与 ScrollView 一起使用