如何为macOS SwiftUI TextField启用自动更正与拼写检查功能
问题原因
macOS 11(Big Sur)版本的SwiftUI存在官方bug,disableAutocorrection(false)修饰符仅对TextEditor生效,TextField底层没有正确加载拼写检查、自动更正、符号替换相关配置,所以无法出现拼写标红、--自动转长破折号的效果。
无需封装NSTextField的解决方案
方案1:升级部署目标到macOS 12+
苹果在macOS 12 Monterey及以上版本修复了该问题,给TextField额外补充spellChecking修饰符即可正常生效:
TextField("Headline", text: $headline) .disableAutocorrection(false) .spellChecking(.yes) // 显式开启拼写检查
方案2:适配macOS 11的全局配置方案
如果需要兼容Big Sur,可以在App启动时通过AppKit的全局外观配置修改NSTextField的默认行为,不需要修改原有TextField代码,也不需要封装NSViewRepresentable:
import SwiftUI import AppKit @main struct YourApp: App { init() { let textFieldAppearance = NSTextField.appearance() // 开启自动更正 textFieldAppearance.isAutomaticSpellingCorrectionEnabled = true // 开启连续拼写检查(错词标红下划线) textFieldAppearance.isContinuousSpellCheckingEnabled = true // 开启自动破折号替换 textFieldAppearance.isAutomaticDashSubstitutionEnabled = true } var body: some Scene { WindowGroup { ContentView() } } }
该配置会全局作用于项目内所有SwiftUI TextField(其底层实现就是NSTextField),完全满足需求。如果只需要对部分TextField生效,才需要做轻量的NSViewRepresentable封装。
内容的提问来源于stack exchange,提问作者jnpdx
相关产品推荐
相关产品推荐

