ScrollView内部的列表未显示在WatchOs上

时间:2019-10-11 04:20:37

标签: swift swiftui swiftui-list

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

3 个答案:

答案 0 :(得分:0)

您是否尝试过将List放在GeometryReader内并在其中设置frame

答案 1 :(得分:0)

为列表指定高度,例如

"tunnelOptions": {
    "drivers": [
        "firefox",
        "internet explorer",
        "MicrosoftEdge",
        { "name": "MicrosoftEdgeChromium", "version": "78.0.276.20" },
        {"name": "chrome", "version": "76.0.3809.68" }
    ]
}

答案 2 :(得分:0)

我在使用 UIKit 时遇到了同样的错误。错误信息与触觉反馈有关,请参阅here
它说无法播放触觉反馈,可能是类型 2,即 directionDown,请参阅 here
由于我的代码没有调用 play(_:),所以必须由 watchOS 本身调用。
错误的原因可能是滚动速度非常快,这可能导致对 play(_:) 的调用过于频繁而无法正确处理。文档说:

<块引用>

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

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