当前位置: 首页 > 面试题库 >

如何使用SwiftUI具有动态视图列表

戚哲
2023-03-14
问题内容

我可以做一个静态列表

List {
   View1()
   View2()
}

但是,如何从数组中动态生成元素列表?我尝试了以下操作,但出现错误: 包含控制流语句的闭包不能与函数生成器“ ViewBuilder”一起使用

    let elements: [Any] = [View1.self, View2.self]

    List {
       ForEach(0..<elements.count) { index in
          if let _ = elements[index] as? View1 {
             View1()
          } else {
             View2()
          }
    }
}

有什么解决办法吗?我要完成的工作是一个列表,其中包含不是静态输入的动态元素集。


问题答案:

看起来答案与将我的视图包装在其中有关 AnyView

struct ContentView : View {
    var myTypes: [Any] = [View1.self, View2.self]
    var body: some View {
        List {
            ForEach(0..<myTypes.count) { index in
                self.buildView(types: self.myTypes, index: index)
            }
        }
    }

    func buildView(types: [Any], index: Int) -> AnyView {
        switch types[index].self {
           case is View1.Type: return AnyView( View1() )
           case is View2.Type: return AnyView( View2() )
           default: return AnyView(EmptyView())
        }
    }

这样,我现在可以从服务器获取视图数据并进行组合。而且,仅在需要时才实例化它们。



 类似资料:
  • 我想在一个LazyvStack中得到一个视图的框架。嵌入在ScrollView中的LazyVStack显示聊天消息(文本和图像)。 因为内容的大小是动态的,所以我不能使用GeometryReader代理。在我的LazyVStack中放一个GeometryReader会破坏布局。(我想是因为动态尺寸。)。 有没有其他方法来获得LazyvStack中视图的框架? 下面是我想做的一个简单的表示。理想情况

  • 最后,使用Beta 5,我们可以通过编程方式弹出到父视图。然而,在我的应用程序中有几个地方,视图有一个“保存”按钮,它结束了一个多步骤的过程并返回到开始。在UIKit中,我使用popToRootViewController(),但我无法在SwiftUI中找到同样的方法。 下面是我试图实现的模式的一个简单例子。 我该怎么做?

  • 问题内容: 将内容添加到ListView时,我希望它自动向下滚动。 我正在使用SwiftUI 和a 作为控制器。新数据将追加到列表中。 当我将新数据追加到消息列表时,我希望列表向下滚动。但是,我必须手动向下滚动。 问题答案: 更新:在iOS 14中,现在有一种本机方式可以执行此操作。我正在这样做 对于iOS 13及以下版本,您可以尝试: 我发现翻转视图对我来说似乎很好。这将在底部启动ScrollV

  • 我试图找出正确的方法,有条件地包括一个视图与swiftui。我不能直接在视图中使用,必须使用堆栈视图才能做到这一点。 这是可行的,但似乎会有更干净的方法。

  • 我对中的有一个问题。 下面是我的代码: 问题:在中按下时,会像它应该的那样消失,取而代之。但是,并不会消失,而是停留在视图B的顶部。 当更改为时,如何强制关闭?请注意,也可以由以外的其他视图更改,因此只将传递给并在单击时将其设置为false并不能完成此工作。

  • 问题内容: 给定两个示例表: 门票表 属性表 我如何获得这样的视图: 重要的是要注意,属性表并不总是相同的。一些“票证”可能具有其他人没有的属性。 这有可能吗? 问题答案: 您可以使用PIVOT执行此操作。在执行PIVOT时,可以使用以下两种方法之一进行操作:使用“静态数据透视表”(将对行进行编码)或“动态数据透视表”将在运行时创建列列表: 静态数据透视表(请参见SQL Fiddle中的Demo)