SwiftUI 部分 header - 使用非大写字母?

SwiftUI Section header - use non uppercase?

创建列表如下:

struct ContentView: View {
    var body: some View {
        List {
            Section(header: Text("Header")) {
                Text("Row 1")
                Text("Row 2")
            }
        }
        .listStyle(PlainListStyle())
    }
}

在 header 部分使用大写文本。

有没有办法强制 header 文本保留其原始大小写?

Section 上有一个 textCase(nil) 修饰符,它尊重原始文本大小写,适用于 iOS 14

来自 Apple 的开发者论坛:https://developer.apple.com/forums/thread/655524

Section(header: Text("Section Title")) {
    [...]
}.textCase(nil)

对于同时适用于 iOS 13 和 14 的解决方案,您可以创建一个自定义修饰符,只为 iOS 14 设置 textCase:

struct SectionHeaderStyle: ViewModifier {
    func body(content: Content) -> some View {
        Group {
            if #available(iOS 14, *) {
                AnyView(content.textCase(.none))
            } else {
                content
            }
        }
    }
}

然后你可以像这样将它应用到你的部分:

Section(header: Text("Section Name")) {
 ...
}.modifier(SectionHeaderStyle())

这是苹果论坛建议的改编版本:https://developer.apple.com/forums/thread/650243

我想添加我的解决方案,我觉得它可以很方便地处理这个问题。我只是制作了一个用于 headers.

部分的自定义文本组件
import SwiftUI

struct SectionHeaderText: View {
    var text: String

    var body: some View {
        if #available(iOS 14.0, *) {
            Text(text).textCase(nil)
        } else {
            Text(text)
        }
    }
}

然后我这样使用它:

Section(header: SectionHeaderText(text: "Info"), ...

#available(iOS 14.0, *) 缓解了整个情况并得到了我想要的结果 :) 也许这对外面的人有帮助!