【发布时间】:2021-07-28 23:38:19
【问题描述】:
我正在尝试向现有项目添加一个简单的 SwiftUI 视图,但 @State 更改未正确传播。该代码在新项目中按预期工作,但在旧项目中不起作用。 @ObservedObject 也会发生同样的事情。
代码:
struct ChannelAccountsView: View {
@State private var showGreeting = true
var body: some View {
VStack {
Toggle(isOn: $showGreeting) {
Text("Show welcome message")
}.padding()
if showGreeting {
Text("Hello World!")
}
}
}
}
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
var window: UIWindow?
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
// Use a UIHostingController as window root view controller.
if let windowScene = scene as? UIWindowScene {
let window = UIWindow(windowScene: windowScene)
let contentView = ChannelAccountsView()
window.rootViewController = UIHostingController(rootView: contentView)
self.window = window
window.makeKeyAndVisible()
}
}
...
}
新项目:
旧项目:
尝试了所有明显的修复:
- 编辑 AppDelegate 并添加 SceneDelegate
- 已编辑 Info.plist
- 清理的项目和派生数据
- 重置模拟器数据
- 在多个模拟器/设备上测试
知道会发生什么吗?
【问题讨论】:
-
older project是什么意思,它与new project有何不同? -
@Asperi
older project-> 已存在 2 年以上且之前未使用 SwiftUI 的项目new project-> 新创建的项目已选择 SwiftUI 作为 UI 创建选项