SwiftUI侧栏列出了单击时未响应的底部项目

问题描述 投票:0回答:1

[这里有补充工具栏列表,其中有我的模型视图中的项目列表。当我点击顶部时,项目正在响应。但是,很少有底部项目(快速移动的单元格)对单击和行没有响应,但没有响应,这取决于我正在检查的设备。假设我的列表中有12个项目,在iPhone 8中最多可以运行7行,对于iPhone 11 pro,最多可以有9行。

SideMenuListView.swift

这是侧边栏上列出菜单的代码。

 List {
       ForEach(self.viewModel.data,id: \.id) { item in
                ZStack(alignment:.leading) {
                        SideMenuCell(image: Image(item.imageName), title: item.name)
                            .frame(height: 42)

                        NavigationLink.init(destination: item.view) {
                            EmptyView()
                        }
                }
                .buttonStyle(PlainButtonStyle())
        }
}

用于创建侧边菜单的代码:

SideMenuContentView.swift

          GeometryReader { _ in
              EmptyView()
          }
          .background(Color.gray.opacity(0.3))
          .opacity(self.isOpen ? 1.0 : 0.0)
          .animation(Animation.easeIn.delay(0.25))
          .onTapGesture {
              // Close Menu on click outside menu.
              self.menuClose()
          }
          VStack(alignment: .leading, spacing: 0){
              /// Set Profile View on top.
              SideMenuHeader().fixedSize()
                  .frame(width: self.width,height: 150)
                  .offset(x: self.isOpen ? 0 : -self.width)
                  .animation(.default)

              /// Set Sidemenu View.
              HStack {
                  SideMenuListView(viewModel: SideMenuListViewModel())
                      .frame(width: self.width)
                      .background(Color.white)
                      .offset(x: self.isOpen ? 0 : -self.width)
                      .animation(.default)
                      .onDisappear {
                          // close side menu
                          self.isOpen = false
                      }
                  Spacer()
              }
          }
      } 

我的手机上有东西吗?我该如何调试内容上是否有覆盖层。

ios swift xcode swiftui
1个回答
0
投票

无法测试提供的代码,因此仅通过代码读取,我认为问题是由于.offset造成的

  SideMenuHeader().fixedSize()
      .frame(width: self.width,height: 150)
      .offset(x: self.isOpen ? 0 : -self.width)  // << here !!
      .animation(.default)

  /// Set Sidemenu View.
  HStack {
      SideMenuListView(viewModel: SideMenuListViewModel())
          .frame(width: self.width)
          .background(Color.white)
          .offset(x: self.isOpen ? 0 : -self.width) // << here !!

这是因为.offset不会更改布局/框架/ contentArea的视图,它仅移动呈现在屏幕上的视觉表示,因此真实视图不在用户看到它并尝试进行交互的位置。

因此解决方案是删除那些偏移量并重新考虑布局。

© www.soinside.com 2019 - 2024. All rights reserved.