我可以做一个静态列表
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)