ios - 从数组添加 `overlay` 修饰符 | swift 用户界面

标签 ios swift swiftui

我有一个数组,其中包含一堆具有首选对齐方式的元素。我正在尝试通过 overlay 修饰符将此数组中的元素添加到 View 中。但是,我无法让它工作。这是我到目前为止所尝试过的


 struct ContentView: View {
    struct ViewText {
        var label: String
        var alignment: Alignment
        var id: String
    }
    
    var viewArray: [ViewText] = [
        ViewText(label: "Hello 1", alignment: .topLeading, id: "1"),
        ViewText(label: "Hello 2", alignment: .topTrailing, id: "2"),
        ViewText(label: "Hello 3", alignment: .bottomLeading, id: "3"),
        ViewText(label: "Hello 4", alignment: .bottomTrailing, id: "4")
    ]
    
    
    var body: some View {
        var backgroundView = Rectangle().frame(width: 100, height: 100).background(Color.red)
        
        ForEach(viewArray, id: \.id) { element in
            backgroundView.overlay(alignment: element.alignment) {
                Text(element.label).foregroundColor(.white)
            }
        }
        
        
    }
}

上述代码的结果
Result of the above code

预期结果
Expected result

上面的代码不起作用。它为数组中存在的每个覆盖添加多个背景 View 。关于如何让它发挥作用有什么想法吗?非常感谢您的宝贵时间

最佳答案

使用 ZStack,它可以与 ForEach 一起使用,并且还可以将 View 相互叠加。

Rectangle().frame(width: 100, height: 100)
    .overlay {
        ZStack {
            ForEach(viewArray, id: \.id) { element in
                Text(element.label).foregroundColor(.white)
                    .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: element.alignment)
            }
        }
    }

请注意,我使用了 maxWidth: .infinity, maxHeight: .infinity 来使 ZStack矩形 的框架相匹配。

输出:

enter image description here

关于ios - 从数组添加 `overlay` 修饰符 | swift 用户界面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76769296/

相关文章:

ios - 如何在 SwiftUI 中向按钮添加多行文本?

ios - 将许可证部分添加到 iOS 设置包的最佳方法

iOS 共享扩展关闭键盘

ios - 无法通过 pragma 禁用 LLVM 优化

ios - Facebook 登录无法快速获取所有用户的个人资料信息

swift - 如果在 SwiftUI 中使用 NavigationView,如何更改背景颜色?

ios - 如果我无法访问正在编写代码的计算机,我(设计人员)如何在开发中测试和使用 iPhone?

ios - 在另一个 UIViewController 中调用函数

swift - 如何在 SKLabelNode 中对不断增加的数字进行动画处理

ios - 在 SwiftUI 中检测并转发屏幕上任意位置的点击