[英]Hide chevron/arrow on NavigationLink when displaying a view, SwiftUI
我正在尝试使用包含视图的 navigationLink 删除出现在屏幕右侧的人字形。 这是我的代码如下:
NavigationView {
List {
NavigationLink(destination: DynamicList()) {
ResultCard()
}
...
}
Stack Overflow 上的其他答案建议使用如下内容:
NavigationLink(...)
.opacity(0)
但是,这在我的情况下不起作用,因为将不透明度降低到 0 也会删除我试图显示的视图。 '.hidden' 也是如此。 我到处搜索,我能找到的唯一可行的解决方案是改变填充以将人字形“推”到一边,但这是一个糟糕的解决方案,因为“ ResultCard ”视图会出现不稳定/关闭-以不同的显示尺寸为中心。
也许无法删除人字形 - 如果是这种情况,是否有任何其他方法可以让用户点击“ResultCard”视图并转到新页面,而不是通过导航关联?
我正在用头撞墙,所以非常感谢任何想法。
您可以在 label 视图上使用.overlay
,并将NavigationLink
与EmptyView()
设置为其 label:
struct ContentView : View {
var body: some View {
NavigationView {
List {
NavigationLink("Link 1", destination: Text("Hi"))
Text("Test")
.overlay(NavigationLink(destination: Text("Test"), label: {
EmptyView()
}))
}
}
}
}
更新:另一种解决方案,似乎适用于除文本之外的其他类型的视图:
struct ContentView : View {
@State private var linkActive = false
var body: some View {
NavigationView {
List {
NavigationLink("Link 1", destination: Text("Hi"))
Button(action: { linkActive = true }) {
Image(systemName: "pencil")
}.overlay(VStack {
if linkActive {
NavigationLink(destination: Text("Test"), isActive: $linkActive) {
EmptyView()
}.opacity(0)
}
})
}
}
}
}
这是一个替代 using.background() 和 selection: 参数,其行为类似于电话/收藏夹视图:
@State private var selectedID: String?
var body: some View {
NavigationView {
List {
ForEach(items) { item in
HStack {
Text(item.name)
Spacer()
Button(action: { selectedID = item.id }) {
Image(systemName: "info.circle")
}
.background {
NavigationLink("", tag: item.id, selection: $selectedID) {
Detail()
}
.hidden()
}
}
}
}
}
}
jnpdx 的更新解决方案几乎对我有用,但它把 animation 弄乱到下一个视图。 这对我有用(实际上比 jnpdx 的答案更简单):
struct ContentView : View {
@State private var linkActive = false
var body: some View {
NavigationView {
List {
Button(action: { linkActive = true }) {
Image(systemName: "pencil")
}.overlay(
NavigationLink(
isActive: $linkActive,
destination: { Text("Test") },
label: { EmptyView() }
).opacity(0)
)
}
}
}
}
这对我有用,基于@wristbands 的解决方案并使用 Xcode 14.1 定位 iOS 16:
struct ContentView : View {
var body: some View {
NavigationStack {
List {
Text("View") // your view here
.overlay {
NavigationLink(destination: { Text("Test") },
label: { EmptyView() })
.opacity(0)
}
}
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.