问题标签 [swiftui-navigationview]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1359 浏览

swiftui - SwiftUI 2.0 中的 navigationBarTitle 和 navigationTitle 修饰符有什么区别?

学习所有新的 SwiftUI 2.0 变化,但遇到的变化.navigationTitle似乎几乎与.navigationBarTitle. 我查看了 WWDC 2020 视频,发现一个视频被提及用于区分 MacOS 中的标签标题?但不确定我是否应该现在使用它而不是.navigationBarTitle在 iOS 中使用它?Apple文档也不清楚两者之间的区别..

所以我的问题是,确切的区别是什么?你将如何在 iOS/MacOS 中使用它们?

0 投票
0 回答
239 浏览

ios - 在 SwiftUI 中使用视图模型而无需分配开销

在SwiftUI中使用视图模型

为了清晰地分离关注点,我想将我的SwiftUI视图与视图模型一起使用。

我有两个视图,一个ListViewDetailView当点击任何列表项时第一个会推动后者的视图——一个经典的导航视图。

viewModel在 my 上定义DetailView如下属性并将其标记为观察对象,以便在其任何已发布属性发生更改时更新视图:

这种方法要求我在内部创建视图时将 a 传递viewModel给's 初始化程序:DetailViewListView

这里DetailViewModel简单定义如下:

(这里的视图模型肯定是过度设计的,但这只是为了解释问题。)

⚡️ 问题

由于每次body更新列表视图时都会创建所有导航链接的目标视图,因此相应的视图模型也是如此。对于如上所示的简单视图模型,这不是什么大问题,但对于更复杂的现实世界视图模型,它肯定会成为问题。例如,视图模型可能会实例化其他初始化起来相当昂贵的类。这将在显示ListView 每个DetailView(模型)时完成——无论它是否会被显示(需要)。

因此,在我看来,在其他视图的主体内创建视图模型是一种反模式。尽管如此,这是我在 Internet 上的代码示例和文章中看到的最常见的做法。

❓ 我的问题

有没有办法让SwiftUI视图NavigationLink立即实例化 s 的目标视图?或者有没有办法为视图创建视图模型以用作视图之外的导航链接目标body

0 投票
1 回答
143 浏览

swift - 使用 NavigationView 从 SwiftUI 中您离开的地方开始

我正在尝试在 SwiftUI 中创建一个多视图工作流程,您可以在其中从上次中断的地方重新开始,但仍然有很好的 NavigationView 过渡。

作为一个基本示例,我希望它具有SignupView(您输入用户凭据的位置)> PersonalInfoView(您输入其他个人信息的位置)>etc.

我最初使用一个简单的 NavigationLink 从一步到下一步。但我也想要它,如果你完成SignupView然后退出应用程序,如果你再次打开它,用户可以PersonalInfoView直接被带到。例如,您可以从上次中断的地方重新开始。

所以我想到了使用条件渲染:

但是现在,每当我从SignupView到时,PersonalInfoView我都不会像使用 NavigationLink 那样获得漂亮的滑动过渡。如果我添加 NavigationLink 到 go to PersonalInfoView,它会滑入其中(就像典型的导航一样),然后滑出到另一个版本的视图(条件渲染)。

所以我想我的问题是,在整个 NavigationView 范式中始终处理条件视图的最佳方式是什么。谢谢

编辑:我可能没有很好地解释我的问题:我仍然想对所有内容使用 NavigationView(以便获得转换、后退按钮等)。我只是希望能够从流程中的不同点开始,但之后的每个视图都将成为导航堆栈的一部分。

0 投票
1 回答
2248 浏览

swiftui - SwiftUI - NavigationLink 无法使用按钮

我正在制作一个应用程序,我在其中输入两个数字,并希望在单击按钮时在第二个屏幕中显示数字的加法结果。我可以在控制台中打印结果,但不幸的是,按钮周围的导航链接似乎不起作用。如果我将 NavigationLink 放在按钮标签周围而不是整个按钮周围,那么它会转到第二个屏幕,但按钮操作停止工作。这是我的代码:

有什么线索吗?谢谢你的好奇心。

0 投票
1 回答
81 浏览

swift - SwiftUI LandScape NavigationTopBar 不会隐藏

我只想要所有视图之间的一个横向视图,所以我在 AppDelegate 中添加了下面的代码

我创建了一个自定义修改器,如下所示,以强制特定视图处于横向模式

我创建的视图如下所示:

所以问题是在横向模式下显示此视图后,navigationBar 将显示,即使我指定它应该隐藏,我也无法隐藏它。

这是 GamePlay 呈现的 roundIntro 视图

另一件事是在按下导航栏后退按钮后,它不会强制视图返回纵向模式。以下是现场照片: 在此处输入图像描述

在此处输入图像描述

0 投票
1 回答
4652 浏览

swift - SwiftUI iOS14 - NavigationView + List - 不会填充空间

自 iOS 14 更新以来,我在 NavigationView 中遇到了 List 问题。

这是代码的简单细分 - 我已经删除了所有未显示问题的内容

这会产生以下结果:

导航视图内的列表

我无法弄清楚为什么列表会像这样悬停在导航视图的中心。据我所知,这应该会产生一个占据所有可用空间的列表视图(导航栏所在的顶部除外)。

事实上,在 iOS 13.5 上运行时,我得到的结果如下图所示:

导航视图中的列表 2

我已经阅读了文档,但无法弄清楚为什么会突然发生这种行为。

任何帮助将不胜感激。

谢谢

0 投票
1 回答
1612 浏览

swiftui - 跟随 NavigationLink 并返回后,SwiftUI .toolbar 消失

我在 NavigationView 的顶层添加了一个 .toolbar,它最终将用于在不使用滑动手势(向上按钮、向下按钮等)的情况下选择列表中的项目。我还有一个 .navigationBar 正在进行,以访问帐户和设置的其他视图。

在大多数情况下,它看起来非常好,但是当我在 NavigationView 中遵循 NavigationLink(在 .navigationBarItems 中),然后使用内置的后退导航时,我的 .toolbar 从顶层消失了。

我是否将 .toolbar 放在错误的位置?感觉像是 .navigationViewStyle(StackNavigationViewStyle()) 的问题,因为当我将其注释掉时,工具栏不会在导航时消失......但我不喜欢默认行为在横向中的工作方式,所以我依赖它.


0 投票
1 回答
66 浏览

swift - SwiftUI - 每个列表视图的内容取决于前一个列表视图中的选择时的最佳方法?

我有 3 个简单的数组:

每个数组填充一个列表视图,并带有指向下一个列表视图的导航链接

但是,我在如何使这个依赖方面遇到了麻烦

例如,

如果在 Listview1 上选择了“欧洲”,则 Listview2 应该只包含英国和法国(不是塞内加尔,因为塞内加尔不在欧洲)

如果在 Listview 2 上选择了“France”,则 Listview 3 应该只包含 Paris

任何有关如何处理此问题的推荐建议都将受到欢迎

谢谢

0 投票
0 回答
320 浏览

ios - 在拆分视图中自定义侧边栏按钮图像

我有一个 SwiftUI 应用程序。在 iPad 上,当拆分视图处于活动状态时,会出现侧边栏图标(左上角)。

iPad 在左侧显示侧边栏,在右侧显示主要内容。 左上角显示一个侧边栏图像,我想更改它。

我无法隐藏它.navigationBarBackButtonHidden(true)来制作我自己的自定义。

我怎样才能解决这个问题?

代码:

0 投票
0 回答
310 浏览

swiftui - SwiftUI NavigationView 在尝试孙子上一个下一个导航时出现父-子-孙场景问题

我在一个需要具有“一对多”实体结构的模型的项目中使用 SwiftUI。我在父级使用导航视图,在父级和子级使用导航链接。

这很好用,因为我可以:

  1. 在父级选择一个子级以导航到该子级
  2. 在子级选择孙子以导航到孙子

我有一个额外的要求 - 在孙子级别提供下一个和上一个按钮。我使用为导航链接提供的标签/选择功能来做到这一点。我给每个孙子一个数字索引标签,然后在子级别调用传入的函数,以通过从索引中添加或减去一个来更改选定的子视图。

问题是当我导航到下一个或上一个孙子时,“后退”链接会更改为最后一次访问的孙子,或者是“返回”而不是子视图。如果然后我在该视图上选择“返回”链接,则会立即转换到以前访问过的孙子视图,然后立即转换到子视图。

包含的代码是一个工作项目,它使用具有相同问题的“一对一”场景显示了一个更简单的示例。

如果我将代码更改为更简单的父子模型,在子级别具有下一个和上一个,这一切都按预期工作,所以问题是由于三个级别造成的。非常欢迎任何有关解决方案的帮助。