2

我在滚动视图中有一个列表,它没有显示在图像和按钮下方。我还尝试将列表和其他项目放在 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;
    }
)
4

3 回答 3

2

为您的列表指明一些高度,例如

 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)
于 2019-10-24T00:03:06.107 回答
0

您是否尝试过将 a 的List内部放入GeometryReader并设置在frame那里?

于 2019-10-11T08:07:39.453 回答
0

我在 UIKit 上遇到了同样的错误。错误消息与触觉反馈有关,请参见此处
它表示无法播放触觉反馈,可能是类型 2,即directionDown,请参见此处
由于我的代码没有调用play(_:),所以必须由 watchOS 自己调用。
错误的原因可能是非常快的滚动,这可能导致play(_:)无法正确处理过于频繁的调用。文档说:

不要快速连续多次调用此方法。如果在调用此方法时触觉引擎已经启动,系统会停止当前反馈并施加至少 100 毫秒的最小延迟,然后再启动引擎以生成新的反馈。

如果这真的是 watchOS 的影响,我想你不能做任何事情来避免错误。

于 2020-12-28T11:59:59.283 回答