为啥@FocusState 会导致 SwiftUI 预览崩溃
Posted
技术标签:
【中文标题】为啥@FocusState 会导致 SwiftUI 预览崩溃【英文标题】:Why @FocusState Crashing SwiftUI Preview为什么@FocusState 会导致 SwiftUI 预览崩溃 【发布时间】:2021-12-21 03:45:11 【问题描述】:好的,我想知道为什么我的预览版在更新 Xcode 后无法正常工作。所以我有一个看起来像这样的枚举。
enum Field
case email
case securedPassword
case unsecuredPassword
现在,当我将 @FocusState 添加到我的 TestView 时,我的预览会崩溃并且不会更新。这是我的代码的样子。
struct TestView1: View
@FocusState var focusedField: Field?
var body: some View
Color.blue
现在,当我注释掉 @FocusState 时,我可以将颜色更改为红色,并且预览会更新。当@FocusState 未被注释掉时,当我将颜色更改为新颜色时,它不会更新预览并给我一个奇怪的崩溃。
现在这是一个错误,如果是,是否有解决方法?
【问题讨论】:
看起来像 Xcode 缺陷 您是否尝试过清理项目?你能提到你正在使用的 Xcode 版本吗?顺便说一句,它对我有用,我在 Xcode 13.1 @Asperi 那么它是一个错误吗?有办法解决吗? @JarvisTheAvenger Xcode 13.2.1 是的,b4 工作正常,但我更新并预览停止工作 【参考方案1】:请参阅我几个月前在 Apple 开发者论坛上发布的相关答案:https://developers.apple.com/forums/thread/681571?answerId=690251022#690251022。 这对你有用吗?
struct TestView1: View
enum Field: Hashable
case email
case securedPassword
case unsecuredPassword
@FocusState var focusedField: Field?
var body: some View
Form
Color.blue
struct TestView1_Previews: PreviewProvider
static var previews: some View
// Here we've wrapped `TestView1` in a `ZStack ... ` View
// so that it won't be the top-level View in our Preview, to avoid
// the known bug that causes the `@FocusState` property of a
// top-level View rendered inside of a Preview, to not work properly.
ZStack
TestView1()
【讨论】:
是的,通过将 TestView1 嵌套到预览内的 ZStack 中来做到这一点。谢谢。 不客气,@LuisRamirez。我很高兴能帮上忙:)!我很确定我确实向 Apple 报告了这个错误,但它可能是我提交给他们的关于屏幕键盘未显示在 SwiftUI Preview 中运行的错误报告的一部分Xcode 在物理 iPhone 上点击 TextField 后预览应用程序,直到应用程序首先被发送到后台,然后又被带回前台... @JeremyPearson 非常感谢!!,提交了反馈意见 谢谢!我有点疯狂地试图弄清楚我做错了什么:)。我也提交了反馈。希望有很多人报告这个。 在预览中添加 ZStack 为我解决了这个问题。谢谢以上是关于为啥@FocusState 会导致 SwiftUI 预览崩溃的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI - 为啥 contentShape 会阻止单击叠加层?
为啥我在 SwiftUI 中的 TextEditor 会忽略我的 .keyboardType?
每次视图出现时,SwiftUI .onAppear withAnimation 都会加快速度。为啥?
为啥我的 SwiftUI JSONDecoder 会出现致命错误?
为啥在 SwiftUI Lifecycle 中将 rootViewController 设置为 UIHostingController 时会出错?