gpt4 book ai didi

SwiftUI - 禁用 NavigationView 后退按钮菜单

转载 作者:行者123 更新时间:2023-12-04 15:07:07 28 4
gpt4 key购买 nike

所以,我有以下代码:

struct ContentView: View {
var body: some View {
NavigationView {
NavigationLink("Page", destination: PageView())
.font(Font.system(.largeTitle))
}
}
}

struct PageView: View {
var body: some View {
Text("Hello, world!")
}
}

当“页面”NavigationLink 被选中时,您将被重定向到一个新屏幕 (PageView)。当您长按(按住)返回按钮返回主屏幕(ContentView)时,会出现一个菜单(iOS14+ 的新功能):

enter image description here

有没有办法在长按手势时禁用菜单弹出,使用 SwiftUI(不添加自定义后退按钮)

大家干杯,感谢您的宝贵时间!

最佳答案

我找到了解决方法。不漂亮,但它有效 ^^。

首先我尝试使用 Introspect用于更改底层 UIKit 组件的库,因为有一个 Solution UIKit 的问题。但结果并不好。

解决方法来了。

想法

用具有相同点击手势的不可见 View 覆盖后退按钮,但无需长按菜单。

解决方案

独立于用户设备类型找出并到达后退按钮的确切位置。

代码:

struct ContentView: View {

@State private var showPageView = false

var body: some View {
NavigationView {
NavigationLink("Page", destination: PageView(), isActive: $showPageView)
.font(Font.system(.largeTitle))
}
.overlay(NavigationBackButtonHiddenTouchView(isActive: $showPageView))
}
}

struct PageView: View {

var body: some View {
ZStack {
Text("Hello, world!")
}
}
}

struct NavigationBackButtonHiddenTouchView: View {

@Binding var isActive: Bool

var body: some View {
VStack {
HStack {
Color.black.opacity(0.0000001).frame(width: 80, height: 35)
.onTapGesture { isActive = false }

Spacer()
}
.frame(height: navBarHeight)

Spacer()
}
}

var navBarHeight: CGFloat = {
return UINavigationController().navigationBar.frame.size.height
}()
}

问题

使其可重用于进一步的导航链接(您需要手动处理它,丑陋但可能)

您可能还必须处理从父 View 中隐藏 NavigationBackButtonHiddenTouchView 的问题,如果这会导致并发症的话。

关于SwiftUI - 禁用 NavigationView 后退按钮菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65907543/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com