【发布时间】:2020-11-14 13:06:39
【问题描述】:
当视图仅适用于 iOS 14 而您的应用适用于 iOS 13 时,如何向视图添加视图修饰符?
例如,textCase(_)。 iOS 14 中的部分标题是大写的,因此要使用标题文本的大小写,您应该在 Text 上设置 .textCase(.none),但这直到 iOS 14 才存在。
Section(header:
Text("Header")
.textCase(.none) //FIXME: 'textCase' is only available in iOS 14.0 or newer
.font(.system(size: 14, weight: .bold))
.foregroundColor(.secondary)
.padding(.top, 50)
)
Xcode 提供了一些建议:
- 添加 if #available 版本检查
- 添加@available 属性
如果您使用#available 版本检查,它会使用#available 包装所有范围内的代码,因此您必须复制所有这些代码才能添加那一行代码。如果您使用@available,则必须复制整个 body 属性或整个结构。
我考虑过创建我自己的 ViewModifier,它只会在 iOS 14 中应用,但会出现这个可怕的错误:
函数声明了一个不透明的返回类型,但返回语句在 它的主体没有匹配的底层类型
struct CompatibleTextCaseModifier: ViewModifier {
func body(content: Content) -> some View {
if #available(iOS 14.0, *) {
return content
.textCase(.none)
} else {
return content
}
}
}
【问题讨论】: