问题标签 [ios-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 回答
604 浏览

ios - 为什么当我的基础数据源更新时 SwiftUI 会自动向后导航,我该如何避免这种行为?

我有一个相当常见的设置:

  • 使用ForEach组件创建的项目列表
  • 当一个项目被点击时,我的应用导航到详细视图
  • 在详细视图中,用户可以执行更改底层项目的更新

问题是更新底层项目(它是一个结构)会导致 SwiftUI 自动向后导航。我认为这是因为结构是一个不可变的值,并且在更新期间被销毁,但是,它确实符合,Identifiable所以我希望 SwiftUI 能够理解该项目仍然存在并且只需要更新而不是销毁。

有没有办法在不离开详细视图的情况下更新基础列表?

这是一个最小的、可重现的示例。

0 投票
2 回答
2050 浏览

xcode - 如何使用 SwiftUI 消除嵌套 NavigationView 中的空间

我目前正在使用 SwiftUI 为 iOS 开发一个项目。我有 3 页(MainMenu、CalendarList 和 DateDetails。)

在第二页 (CalenderList) 上,屏幕顶部和实际 NavigationBarTitle 之间有一个空白区域。

第 2 页的图像 - CalendarList

在第三页上,您可以看到返回按钮(到 MainMenu)顶部有两个空白区域。

第 3 页的图片 - 日期详情

我见过人们使用 .navigationBarHidden 来解决这个问题,但我无法以解决问题的方式实现它。

我是否错误地使用 NavigationView()?还是有什么特别的技巧?

这是 MainMenu 的代码:

这是 CalendarList 的代码(第 2 页):

这是 DateDetails 的代码(第 3 页):

0 投票
0 回答
248 浏览

ios - SwiftUI 通过推送通知在 NavigationView 中打开视图

我想在点击推送通知后打开一个视图。视图和通知都工作正常,但我的问题是当我尝试通过 .sheet(isPresented) 从推送通知打开视图时,它总是将视图呈现为模态。

我想实现视图实际上是在 NavigationView 中打开的,它通常是在手动访问它时。

为了更清楚:

点击推送通知后,我想直接跳转到 NavigationView 树中的 DetailView() (类似于点击通知时 Apple 日历应用程序正在执行的操作)。

有任何想法吗?

0 投票
1 回答
117 浏览

swift - 有没有办法从 SpriteView 场景中关闭 SwiftUI 视图?

我的场景是这样呈现的

在其他非 spriteKit 视图中,我曾经self.presentationMode.wrappedValue.dismiss()导航回上一页。一旦从场景中触发游戏结束,在这种情况下我可以做类似的事情吗?(所有视图都在导航视图中)

0 投票
1 回答
69 浏览

swiftui - PresentationMode.dismiss 在 ForEach 中使用多个 NavigationLinks 时的奇怪行为

我的应用有 4 个视图(我们称它们为 View_A[root] -> View_B -> View_C -> View_D)。它们之间的导航是使用 NavigationView/NavigationLink 进行的。

当我从最后一个视图(View_D)调用self.presentationMode.wrappedValue.dismiss()时,我希望它只关闭当前视图(D),但由于某种原因,它关闭了所有视图并停在视图 A(根视图) .

这很奇怪。我花了几个小时试图弄清楚那里发生了什么,我发现 - 如果我从“View_A”中删除“ForEach”,它会正常工作,只有最后一个视图被忽略。即使 ForEach 在此示例中仅获得 1 个静态对象。

第二个奇怪的地方是

- 如果我不将“self.thisSession.stats”更改为 false,它也可以正常工作,只关闭最后一个视图。

这非常奇怪,因为 View_A (据我所知)不依赖于 thisSession 环境变量。

关于如何防止 View_C 和 View_B 在这种情况下被解雇的任何想法?单击链接后,我想最终到达View_C ,而不是View_A

感谢您提供任何帮助,我花了一段时间才找到它的来源,但我不够聪明,无法继续进行;)

0 投票
0 回答
242 浏览

swiftui - Apple Watch 上的 SwiftUI NavigationView 在子视图中触发 onAppear 的多次调用

使用 Xcode Beta 12.3,以下代码将调用两次 onAppear 并打印两次。当我注释掉包装 ContentView 的 NavigationView 时,onAppear 只被调用一次。这是预期的行为吗?似乎任何 NavigationView 都会触发 onAppear 的多次调用,这不是我所期望的......我希望与 UIKit 中的 ViewWillAppear 具有相同的行为。

0 投票
3 回答
743 浏览

swiftui - 在 SwiftUI 的 SplitView 中导航到 master 而不是 detail

我的 iPad 就绪应用程序中有一个拆分视图:

所以我喜欢SlaveView在列表本身中打开视图,而不是在详细视图中。我尝试在 中设置另一个NavigationViewSlave下面还有一个文本,同时在两个和每个上都设置了所有s navigationViewStyle,但没有运气。MasterSlave

这是您可以构建的最简单的从视图:

那么如何更改拆分视图的主(左)视图而不是细节(右)视图?

请注意,这是一个简化的可重现代码。实际项目使用更复杂的主从列表等。此外,我们不想丢失导航的东西,如过渡、标题转换、后退按钮等。

为了更清楚,我需要流程中的这种状态:

需要的步骤

0 投票
1 回答
374 浏览

swiftui - SwiftUI 导航控制器卡顿,每个列表行有两个 Navigationlinks

我正在尝试在重复列表中创建两个 NavigationLink。每个都有一个单独的目的地。在我将对根视图的调用嵌入到 List/ForEach 循环之前,代码一切正常。此时导航变得非常奇怪。

尝试单击任一链接,然后单击顶部的后退指示器。它将转到一个 NavigationLink,然后转到另一个。有时以不同的顺序,有时它会从一个链接自动返回,有时它不会打开第二个详细视图,直到您从第一个详细视图返回。它在 Preview 中以及在您构建和运行应用程序时都执行此操作。

我已将代码提炼为以下最基本的代码。如果您按照 ContentView 中的说明注释 2 行,您将看到正确的行为。

我正在运行 Catalina 10.15.5、xCode 11.6,应用程序目标为 IOS 13.6。

如何修改代码,使其与 List/ForEach 循环一起使用?

0 投票
1 回答
181 浏览

swift - NavigationView [Swift] 中的双重列表

我试图将两个类别的项目放在两个不同的列表中,名为“Wide-Field”和“Deep-Sky”,但是我希望第二个列表低于第一个。

期待它看起来像这样:

在此处输入图像描述

但是,相反,它将屏幕一分为二,我得到了这个结果:

在此处输入图像描述

我当前的代码:

0 投票
0 回答
239 浏览

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

在SwiftUI中使用视图模型

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

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

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

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

这里DetailViewModel简单定义如下:

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

⚡️ 问题

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

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

❓ 我的问题

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