Умные разделители между скрывающимися видами - PullRequest
0 голосов
/ 04 августа 2020

У меня есть представление, которое инкапсулирует некоторые logi c представления, и как часть этого logi c оно может скрываться. Пример игрушки:

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

Now I want to do the same, but using a custom separator instead of spacing. Similarly, I want separator to be inserted only between non-empty items.

Separator

Is there an API that would insert 2 separators between 3 visible views? Something like this:

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

Я проверил VStack, Group, ForEach, но ничего не нашел. Я действительно не хочу поднимать скрывающуюся логику c на родительскую. Любые идеи для обходного пути, при котором скрытие logi c внутри Item?

1 Ответ

0 голосов
/ 16 августа 2020

Вот возможный подход (и вы продолжаете использовать тот же VStack)

Протестировано с Xcode 12 / iOS 14

демо

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)
            }
        )
    }
}
...