相关疑难解决方法(0)

在 SwiftUI 中隐藏导航栏而不会丢失向后滑动手势

在 SwiftUI 中,每当导航栏被隐藏时,滑动返回手势也会被禁用。

有什么办法可以在保留 SwiftUI 中的向后滑动手势的同时隐藏导航栏?我已经有一个自定义的“返回”按钮,但仍然需要手势。

我已经看到了一些 UIKit 的解决方案,但仍然不知道如何在 SwiftUI 中做到这一点

这是您自己尝试的代码:

import SwiftUI

struct RootView: View {
    var body: some View {
        NavigationView {
            NavigationLink(destination: SecondView()) {
                Text("Go to second view")
            }
        }
    }
}

struct SecondView: View {
    var body: some View{
        Text("As you can see, swipe to go back will not work")
        .navigationBarTitle("")
        .navigationBarHidden(true)
    }
}
Run Code Online (Sandbox Code Playgroud)

非常感谢任何建议或解决方案

swift swiftui

14
推荐指数
5
解决办法
5118
查看次数

SwiftUI中NavigationView导航栏的自定义后退按钮

我想添加一个自定义导航按钮,该按钮看起来会像这样:

所需的导航后退按钮

现在,我BackButton为此编写了一个自定义视图。将该视图用作导航栏的主要项目时,请执行以下操作:

.navigationBarItems(leading: BackButton())
Run Code Online (Sandbox Code Playgroud)

...导航视图如下所示:

当前导航后退按钮

我玩过类似的修饰符:

.navigationBarItem(title: Text(""), titleDisplayMode: .automatic, hidesBackButton: true)
Run Code Online (Sandbox Code Playgroud)

没有任何运气。

我怎么能够...

  1. 在导航栏中设置用作自定义后退按钮的视图?要么:
  2. 以编程方式将视图弹出回到其父级?
    在采用这种方法时,我可以使用完全隐藏导航栏.navigationBarHidden(true)

swift navigationview swiftui

11
推荐指数
8
解决办法
4262
查看次数

如何修复在 iOS 17 中破坏 SwiftUI 导航的 UINavigationController 扩展

我在 iOS 15 和 iOS 16 中一直使用以下扩展,似乎没有任何问题。对于上下文,我在项目中实现了此功能,以提供保留向后滑动手势的功能,以便在视图层次结构(子级到父级)中向后导航。这是因为使用后退按钮的自定义实现(出于 UI 样式目的)隐藏 SwiftUI 中的工具栏或导航栏会导致向后滑动手势丢失。

这就是这个扩展发挥作用的地方。感谢尼克·贝鲁奇的最高评价答案,我在这里找到了这一点。隐藏导航栏而不丢失 SwiftUI 中的向后滑动手势

现在的问题是,在 iOS 17.0 中,当从子视图滑回后返回到根视图时,根视图会在设备和模拟器上冻结并中断。有没有人重现或遇到过这个问题?要完全重新创建场景,只需.toolbar(.hidden)在子视图上使用即可,或者.navigationBarBackButtonHidden()改为使用。

还需要注意的是,我正在使用dismiss()弹出的视图。下面的片段...您只需根据自己的喜好将自定义后退按钮放置在子视图中即可重新创建此示例。

extension UINavigationController: UIGestureRecognizerDelegate {
    override open func viewDidLoad() {
        super.viewDidLoad()
        interactivePopGestureRecognizer?.delegate = self
    }

    public func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
        return viewControllers.count > 1
    }
}
Run Code Online (Sandbox Code Playgroud)
struct CustomBackButton: View {
    @Environment(\.dismiss) var dismiss
    var body: some View {
        Button(action: {
            dismiss()
        }) {
            // your pretty swiftui code here
        }
    }
} …
Run Code Online (Sandbox Code Playgroud)

navigation gesture swift swiftui ios17

10
推荐指数
1
解决办法
994
查看次数

标签 统计

swift ×3

swiftui ×3

gesture ×1

ios17 ×1

navigation ×1

navigationview ×1