SwiftUI中关闭Action Sheet时视图是否会被重建?
问题解答
这不是视图重新创建导致的,而是SwiftUI的actionSheet(isPresented:)修饰符内置的自动状态同步机制在起作用。
具体说明:
- 当你通过
isPresented参数绑定一个布尔值来控制ActionSheet的显示/隐藏时,SwiftUI会负责维护这个绑定值和UI状态的一致性。 - 无论用户以何种方式关闭ActionSheet——包括点击取消按钮、点击ActionSheet外部区域、使用系统返回操作等——SwiftUI都会自动将绑定的布尔值设置为
false,以此确保状态变量和实际UI展示保持同步。 - 这种行为是SwiftUI框架内部的设计逻辑,和视图是否被销毁重建没有关系。你可以通过给
showLogoutOptions添加didSet观察器来验证:
关闭ActionSheet时会打印出@State private var showLogoutOptions = false { didSet { print("showLogoutOptions changed to: \(showLogoutOptions)") } }showLogoutOptions changed to: false,但视图的初始化方法不会被再次调用,说明视图并没有被重建。
结合你的代码来看:
你通过$showLogoutOptions绑定控制ActionSheet的显示,不管用户点击“Sign Out”还是“Cancel”按钮,SwiftUI都会自动把showLogoutOptions置为false,不需要你手动在按钮的action里修改这个状态值。
内容的提问来源于stack exchange,提问作者Gabriel
相关产品推荐
相关产品推荐

