从目标视图返回时,SwiftUI NavigationLink 显示为突出显示
Posted
技术标签:
【中文标题】从目标视图返回时,SwiftUI NavigationLink 显示为突出显示【英文标题】:SwiftUI NavigationLink shows as highlighted when going back from destination view 【发布时间】:2020-10-06 20:54:34 【问题描述】:我在Form
中有一个NavigationLink
(屏幕截图1)。当我单击时,导航会转到详细信息页面(屏幕截图 2)。当我使用返回按钮或滑动手势返回时,NavigationLink
变为突出显示状态(屏幕截图 3)。
请看下面我的代码。
我应该如何解决这个问题? 谢谢。
首页(第一个导航链接所在的位置):
NavigationView
// Content
VStack
// Navigation to profileview
NavigationLink(destination: ProfileView(showing: self.$profileClicked).environmentObject(self.user),
isActive: self.$profileClicked)
.navigationBarTitleDisplayMode(.inline)
.toolbar
ToolbarItem(placement: .navigationBarTrailing)
Button(action: self.profileClicked.toggle())
Image(systemName: "person.circle.fill")
个人资料视图(屏幕截图 1):
VStack
// ...
List
Section
NavigationLink(destination: AccountInfoView().environmentObject(self.user))
HStack
Image(systemName: "person.fill")
.foregroundColor(Color("main"))
Text("Account information")
Spacer()
// ...
.navigationTitle("Profile")
Accountview(第二张截图)
var body: some View
VStack
Form
HStack
Text("ID:")
.padding(8)
Spacer()
Text(self.user.id)
.foregroundColor(Color.gray)
.font(.system(size: 13))
.lineLimit(1)
HStack
Text("Email:")
.padding(8)
Spacer()
Text(self.user.email)
.foregroundColor(Color.gray)
.lineLimit(1)
.navigationTitle("Account")
【问题讨论】:
提供的代码快照适用于 Xcode 12.0 / ios 14,因此您的问题是在不同的代码中或由于其他环境。 你有多个 NavigationView 吗?还是您从 UINavigationController 使用它?还是您将其呈现为一张纸? 1 个导航视图,有 1 个指向此配置文件视图的导航链接,以及从那里指向详细信息的导航链接。没有工作表,只是一个带有导航链接目标的新页面。 @pawello2222 正如 Asperi 所说,您的示例不可重现。请尝试包含完整的视图层次结构(不是完整的代码,只是层次结构 - 例如,我们甚至看不到表单)。 感谢您的调查。添加了您要求的代码。 @pawello2222 【参考方案1】:只需在List
上添加.onAppear
并将selectionStyle
设置为none
List.onAppear
UITableViewCell.appearance().selectionStyle = .none
确保将所有内容都包含在 NavigationView
中
【讨论】:
对我不起作用。不确定,但我认为“列表”不会再次出现,因为它在导航视图中它的堆栈... 你把所有东西都包在 NavigationView 里了吗 配置文件视图是来自其他导航链接的目的地,所以我不使用新的导航视图,因为它已经在第一个导航链接中 我明白了,可能看起来很奇怪,但尝试在主列表上应用选择样式功能 它确实对我有用,但测试了几次我认为缺少某些东西【参考方案2】:我们观察到了同样的问题。如果将 List 添加到 VStack 中,则单元格的取消突出显示将不起作用。
以下 sn-p 不适用于 iOS 14。
UITableViewCell.appearance().selectionStyle = .none
我们能够修复它的方法是使用 LazyVStack。
我们从层次结构 VStack->List
迁移到 VStack->ScrollView->LazyVStack->ForEach
【讨论】:
以上是关于从目标视图返回时,SwiftUI NavigationLink 显示为突出显示的主要内容,如果未能解决你的问题,请参考以下文章
如何将一个 SwiftUI 视图作为变量传递给另一个视图结构