用于iOS 13的typealias LazyVStack

时间:2020-08-02 15:52:44

标签: swift swiftui

我有一个SwiftUI应用,我想维持对iOS 13的支持,但是在iOS 14上,我想使用新的LazyVStackLazyHStack。我本以为typealias对此很合适,但是不确定如何正确设置别名,以便在iOS 13而不是14上使用别名。我尝试过此操作,但我相信这会使别名可用在iOS 13及更高版本上,因此也将其包含在iOS 14上。

是否有一种方法只能将可用性设置为iOS 13?还是有更好的方法来做到这一点?

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

1 个答案:

答案 0 :(得分:6)

这里有可能用作常规堆栈容器的包装器

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