隐藏式视图之间的智能分隔符

时间:2020-08-04 10:58:12

标签: swiftui

我有一个视图,该视图封装了一些表示逻辑,并且可以隐藏自身。一个玩具示例:

struct Item: View {
    var x: Int

    var body: some View {
        if x % 3 == 1 {
            return AnyView(EmptyView())
        }
        return AnyView(Text("\(x)").background(Color.blue))
    }
}

当我在Item中使用VStack时,仅在非空字符之间插入空格就足够了。

VStack(spacing: 8) {
    Item(x: 0)
    Item(x: 1)
    Item(x: 2)
    Item(x: 3)
}

Spacing

现在我想做同样的事情,但是使用自定义分隔符而不是空格。同样,我希望仅在非空项目之间插入分隔符。

Separator

是否有一个API可以在3个可见视图之间插入2个分隔符?像这样:

Something(separator: Divider()) {
    Item(x: 0)
    Item(x: 1)
    Item(x: 2)
    Item(x: 3)
}

我已经检查过VStackGroupForEach,但是没有找到任何东西。我真的不想将隐藏逻辑引入父级。有什么解决方法可以将隐藏逻辑保留在Item内吗?

1 个答案:

答案 0 :(得分:0)

这是可行的方法(您将继续使用相同的VStack

通过Xcode 12 / iOS 14测试

demo

struct Item: View {
    var x: Int

    var body: some View {
        if x % 3 == 1 {
            return AnyView(EmptyView())
        }
        return AnyView(
            VStack {
                Text("\(x)").background(Color.blue)
                Divider().padding(.horizontal)
            }
        )
    }
}