从目标视图返回时,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 列表数据会导致意外行为

如何将一个 SwiftUI 视图作为变量传递给另一个视图结构

从 Core Data 加载图像使 NavigationView 过渡变得跳跃

SwiftUI 在单击时执行脚本并在视图窗口上返回输出

从 SwiftUI 视图返回文本

SwiftUI 以编程方式从可表示返回到视图