typealias LazyVStack для iOS 13 - PullRequest
       8

typealias LazyVStack для iOS 13

2 голосов
/ 02 августа 2020

У меня есть приложение SwiftUI, для которого я хочу поддерживать iOS 13, но на iOS 14 я хочу использовать новые LazyVStack и LazyHStack. Я думал, что typealias идеально подходит для этого, но не знал, как правильно это настроить, поэтому псевдоним используется на iOS 13, но не на 14. Я пробовал это, но считаю, что это сделает псевдоним доступным. на iOS 13 и более поздних версиях, поэтому будет включать его и в iOS 14.

Есть ли способ установить доступность только на iOS 13? Или есть лучший способ сделать это?

@available(iOS 13.0, *)
typealias LazyVStack = VStack

1 Ответ

4 голосов
/ 02 августа 2020

Здесь возможна обертка, которую можно использовать как обычный контейнер стека

struct CompatibleVStack<Content> : View where Content : View {
    let alignment: HorizontalAlignment
    let spacing: CGFloat?
    let content: () -> Content

    init(alignment: HorizontalAlignment = .center, spacing: CGFloat? = nil,
            @ViewBuilder content: @escaping () -> Content) {
        self.alignment = alignment
        self.spacing = spacing
        self.content = content
    }

    var body: some View {
      Group {
        if #available(iOS 14, *) { // << add more platforms if needed
            LazyVStack(alignment: alignment, spacing: spacing, pinnedViews: [], content:content)
        } else {
            VStack(alignment: alignment, spacing: spacing, content:content)
        }
      }
    }
}
...