本篇文章给大家谈谈地方信息平台网站源码分享,以及地方平台公司是什么意思对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。
我知道,我们都对NavigationView束手无策,准备和它说再见。
背景
老实说,NavigationView很糟糕。除了众多限制之外,开发人员还必须处理大量错误并添加变通方法。
我们在Canopas也不例外!
虽然我们对新的SwiftUI感到非常兴奋,并准备将其集成到一些生产项目中,但导航总是很痛苦。我们甚至开发了一个库UIPilot来使导航尽可能简单。
2-3年后,Apple终于意识到我们需要全新的东西,于是NavigationStack出现了。
NavigationStack提供了NavigationView缺乏的功能,例如提供类似于路由器系统的视图等等。
让我们探索如何使用NavigationStack进行基本的导航操作。
大纲
今天,我们将讨论涵盖95%用例的5个场景。根据需要随意跳来跳去。
推屏:A?A—B弹出最后一个屏幕:A—B?A弹出多个屏幕:A—B—C—D?A—B弹出到根:A—B—C—D?A更新根:A?B
让我们开始吧!
1.推屏:A?A—B
推送屏幕是一件非常简单的事情。让我们从定义NavigationStack开始。
structContentView:View{\n@ObservedObject\nvarrouter=Router<Path>()\n\nvarbody:someView{\nNavigationStack(path:$router.paths){\nScreenA()\n.navigationDestination(for:Path.self){pathin\nswitchpath{\ncase.A:ScreenA()\ncase.B:ScreenB()\n}\n}\n}.environmentObject(router)\n}\n}
让我们在这里了解NavigationStack的结构。
我们已经定义了一个变量路由器来跟踪屏幕堆栈。当我们想要推送/弹出屏幕时,我们将对其进行更新。这使我们能够非常轻松地以编程方式更新屏幕。我们已经将该变量传递给NavigationStack,因此它将了解要显示哪些屏幕。在内容中,我们定义了ScreenA,它将是屏幕的根,不能更改。稍后我们将看到如何绕过这个限制。现在是有趣的部分navigationDestination。它允许我们将Route映射到Views。例如,这里我们希望enum.A应显示ScreenA,而enum.B应显示ScreenB。最后,我们将这个路由器作为environmentObject注入,因此在所有屏幕上都可以轻松访问它。
而已。现在让我们添加路由器和屏幕的定义。
finalclassRouter<T:Hashable>:ObservableObject{\n@Publishedvarpaths:[T]=[]\nfuncpush(_path:T){\npaths.append(path)\n}\n}\n\nenumPath{\ncaseA\ncaseB\n}\n\nstructScreenA:View{\n\n@EnvironmentObjectvarrouter:Router<Path>\n\nvarbody:someView{\nButton{\nrouter.push(.B)\n}label:{\nText(&34;)\n}.navigationTitle(&34;)\n}\n}\n\nstructScreenB:View{\nvarbody:someView{\nText(&39;mcontentofscreenB&34;B&34;Popme&34;B&34;PoptoscreenB&34;D&34;PoptoRoot&34;D&34;ReplacewithB&34;A”)\n}\n}
好吧,仅此而已!单击按钮,您将看到ScreenA替换为ScreenB。
结论
希望您对NavigationStack的工作原理有一个基本的了解。这很容易学习。
但是,添加额外的辅助类(如Router和RouterView)会使常见用例更加简单。
请记住,NavigationStack仅在iOS16上可用,这意味着您必须根据操作系统版本管理两种不同的实现!
不过不用担心,我们将更新我们的UIPilot库并使其向后兼容,以便它在新平台上使用NavigationStack并在旧版本上回退到NavigationView。UIPilot是一个非常小的库,可能只是您在此处看到的Router和RouterView类的组合。
好消息是,不会有API更改,因此您只需更新UIPilot版本即可开始使用NavigationStack。
与往常一样,非常欢迎您的反馈和建议,请将它们留在下面的评论部分。
关注七爪网,获取更多APP/小程序/网站源码资源!
END,本文到此结束,如果可以帮助到大家,还望关注本站哦!