Swiftui 隐藏披露箭头

Posted

技术标签:

【中文标题】Swiftui 隐藏披露箭头【英文标题】:Swiftui hide disclosure arrow 【发布时间】:2020-02-10 11:59:23 【问题描述】:

我有这个观点

NavigationView 
                 GeometryReader  geometry in

                    List 
                        ForEach(self.viewModel.items)  item in
                            HStack(spacing: 0, content:  
                                ZStack 
                                    RowItemView(data: item.FirstItem)
                                    NavigationLink(destination: CustomView(data: item.FirstItem))
                                    
                                        EmptyView()
                                    

                                
                                .frame(width: geometry.size.width / 2, alignment: .center)

                                if (item.SecondItem != nil)  
                                    ZStack 
                                            RowItemView(data: item.SecondItem!)
                                    NavigationLink(destination: CustomView(data: item.SecondItem!))
                                    
                                        EmptyView()
                                    
                                
                            )
                        .listRowInsets(EdgeInsets())
                    
                

我想隐藏 NavigationView 的公开箭头。 我尝试添加.buttonStyle(PlainButtonStyle()) 或向navigationLink 添加负尾随,但它没有改变。

我已经阅读了this question 和this one,但它们在我的情况下不起作用,可能是因为我正在创建一个网格而不是一个简单的列表。

【问题讨论】:

【参考方案1】:

在这种情况下,可能的方法是使用零帧,如下所示

NavigationLink(destination: CustomView(data: item.FirstItem)) 
    EmptyView()
.frame(width: 0)

【讨论】:

您好,感谢您的回复。它不起作用:-(箭头移动到视图的中心。 @LucaFongaro,这很奇怪。有没有特定的环境?我用 Xcode 11.2 / ios 13.2 对其进行了测试,它可以工作。 嗨。我有 XCode 11.3.1。箭头仍然显示在预览和设备上(iPhone 7 / iOS 13.3.1)问题可能出在这行代码.listRowInsets(EdgeInsets())如果我删除它或传递一个非零边缘它可以工作(也不是' t 必须将框架设置为 0 宽度)我希望 Apple 将创建一个简单的 API 来隐藏箭头:-/ 编辑使用此 listRowInsets(EdgeInsets.init(top: 8, leading: 0, bottom: 8, trailing: 0)) 它可以工作。谢谢你的帮助。你让我朝着正确的方向前进【参考方案2】:

感谢@Asperi,我发现了问题所在。

listRowInsets 中的 EdgeInsets 为零时,箭头仍会显示。

所以我创造了这个技巧(适用于 Xcode 13.3.1)

List 
    ForEach(self.viewModel.items)  item in
        //code for creating the row
    .listRowInsets(EdgeInsets.init(top: 8, leading: 0, bottom: 8, trailing: 0))

both 顶部和底部设置一个值。

我不知道这是否是摆脱那个烦人的箭头的正确方法,但对于我的应用程序来说它可以工作:-)

【讨论】:

以上是关于Swiftui 隐藏披露箭头的主要内容,如果未能解决你的问题,请参考以下文章

没有 NavigationLink 的 SwiftUI 列表披露指示器

SwiftUI - 披露组扩展行为 - 保持顶部项目静态

SwiftUI 2 - 如何防止顶部部分在 macOS 和 iPadOS 的列表中关闭

在 SwiftUI 中滑动列表时隐藏导航栏

SwiftUI macOS 在 TextField 处于活动状态时使用箭头键滚动列表

SwiftUI |动画此路径形状