SwiftUI的onAppear在NavigationView中不触发的问题
文章摘要
HeoGPT
这篇文章介绍了一个问题,其中一位群友询问如何在SwiftUI中实现每次进入`ContentView`时触发`print("我来啦")`。作者提供了一个使用`onAppear`的示例代码,但指出这并不适用于每次进入页面。解决方案是属性修饰会触发可见de元素,以便触发`onAppear`和`onDisappear`,因为当跳转到子页面时,`NavigationLink`被遮住不可见,所以可以作为修饰的元素。作者还指出SwiftUI在处理代码顺序和位置时很重要,解决问题时应考虑这些因素。
此内容根据文章生成,并经过人工审核,仅用于文章内容的解释与总结
投诉今天水群看到有群友问问题:
目前他是用onappear来实现的。大致的例子如下:
1 | struct ContentView: View { |
如何每次到这个ContentView
的时候都触发print("我来啦")
解决方案
其实这就是跟swiftui的机制有关,当你访问到DetailView()
的时候,其实只是在NavigationView
中显示了一个视图。
无论你是否跳转到子页面,Navigationview都始终显示,不会触发onAppear
和onDisappear
所以只需要在一个会发生变动的元素上标记onAppear
属性即可。
所以我们更改一下onAppear
描述的对象:
1 | struct ContentView: View { |
我们将onAppear描述对象改为不会始终显示的NavigationLink
视图,因为跳转子页面的时候NavigationLink
被遮住不可见。所以可以触发onDisappear
。当返回时同理,可以触发onAppear
。
Swiftui是一个比较看重代码顺序和位置的框架,当遇到问题的时候可以向这方面分析一下。
扩展方案
当页面元素比较多的时候可以放在NavigationView
的下一级。或者自己套一个层级。例如:
1 | struct ContentView: View { |
- 感谢你赐予我前进的力量
打赏者名单
因为你们的支持让我意识到写文章的价值🙏
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 张洪Heo
评论
生成评论
匿名评论
违规举报
✅ 你无需删除空行,直接评论以获取最佳展示效果