Swiftui 无法在横向中将列表宽度设置为0

Swiftui 无法在横向中将列表宽度设置为0,swiftui,Swiftui,我正试着用列表做滑动侧面板。问题是,在使用safearea guide的设备上,我无法在横向方向将列表宽度设置为0 struct ContentView: View { var body: some View { HStack { Spacer() List { Text("1") Text("2") } .frame(width:0) } .backgro

我正试着用列表做滑动侧面板。问题是,在使用safearea guide的设备上,我无法在横向方向将列表宽度设置为0

struct ContentView: View {
  var body: some View {
    HStack {
        Spacer()
        List {
            Text("1")
            Text("2")
        }
        .frame(width:0)
    }
    .background(Color.green)
  }
}
在纵向模式下,它看起来像:

在景观方面:

你知道如何完全隐藏列表吗

在没有安全区域的设备上,一切正常,没有问题

我发现解决办法是增加

Rectangle().frame(width: 0)
对于同一个HStack,则列表在所有条件下都不会显示,但这看起来很奇怪

6月10日起更新: 我一直在与苹果DTS团队讨论这个问题,他们确认,我发现一个系统错误,现在通过FB7729714报告给工程团队。
另一方面,他们告诉我设置视图的宽度会导致子视图的重新显示,所以设置为0就更复杂了。因此,建议您在滑动视图等情况下使用位置和偏移。

我不确定您的代码到底是什么样子,因为您没有提供更多信息,但以下是如何在SwiftUI中实现滑动菜单,而无需额外的修改

使用GeometryReader、偏移和动画过渡显示/隐藏侧面板:

struct ContentView: View {
    @State var showMenu = false

    var body: some View {
        NavigationView {
            GeometryReader { geometry in
                ZStack(alignment: .leading) {
                    MainView(showMenu: self.$showMenu)
                        .frame(width: geometry.size.width, height: geometry.size.height)
                        .offset(x: self.showMenu ? geometry.size.width : 0)
                        .disabled(self.showMenu ? true : false)
                    if self.showMenu {
                        MenuView()
                            .frame(width: geometry.size.width)
                            .transition(.move(edge: .leading))
                    }
                }
            }
            .background(Color.red)
            .navigationBarTitle("Side Menu", displayMode: .inline)
            .navigationBarItems(leading: (
                Button(action: {
                    withAnimation {
                        self.showMenu.toggle()
                    }
                    }) {
                    Image(systemName: "line.horizontal.3")
                        .imageScale(.large)
                }
                ))
        }
    }
}
有关此代码的完整说明,请参见本教程:

您还可以尝试将其添加到视图中,以填充整个屏幕:

.edgesIgnoringSafeArea()

在Xcode 11.5中测试。滑块完全从屏幕上消失-我希望这是您想要实现的。

您到底想实现什么?为什么列表必须在屏幕上可见?@pawello2222,正如我在开头所写的,在我的应用程序中,我有一个侧面板,可以通过按下控制按钮从右侧滑出或滑入来关闭或打开。一切都很顺利。但在测试过程中,我发现在类似iPhoneX的设备上,在横向模式下,侧面板并没有完全隐藏,无论我做什么,它都会留在屏幕上。只有当列表位于面板内部时,才会出现问题。有趣的是,如果我将Rectangle.framewidth:0添加到同一个HStack中,侧面板会很好地关闭。如果我将间距添加到间距:0{…-同样,该列表是不可考虑的
struct MenuView: View {
    var body: some View {
        List {
            Text("Item 1")
            Text("Item 2")
            Spacer()
        }
        .background(Color.green)
        .padding()
        .frame(maxWidth: .infinity, alignment: .leading)
    }
}
.edgesIgnoringSafeArea()