首页 > 解决方案 > SwiftUI 如何在不使用导航视图的情况下显示大导航标题?

问题描述

我正在使用this SO Answer中的以下PullToRefreshHack,效果很好,但问题是当我将它包装在NavigationView中时(我需要能够显示此视图的大导航标题)我失去了拉动刷新的功能. 我不确定为什么?我该如何解决这个问题,或者删除 NavigationView 但仍然在顶部显示一个大标题?

 //Usage
     var body: some View {
        NavigationView {
            ScrollView {
             PullToRefreshHack(coordinateSpaceName: "pullToRefreshInTrendsView") {
                        print("user pulled to refresh")
                          generator.impactOccurred()
                        self.loadDataForTrendsView()
                    }


struct PullToRefreshHack: View {
    
    var coordinateSpaceName: String
    var onRefresh: ()->Void
    
    @State var needRefresh: Bool = false
    
    var body: some View {
        GeometryReader { geo in
            if (geo.frame(in: .named(coordinateSpaceName)).midY > 50) {
                Spacer()
                    .onAppear {
                        needRefresh = true
                    }
            } else if (geo.frame(in: .named(coordinateSpaceName)).maxY < 10) {
                Spacer()
                    .onAppear {
                        if needRefresh {
                            needRefresh = false
                            onRefresh()
                        }
                    }
            }
            HStack {
                Spacer()
                if needRefresh {
                    ProgressView()
                } else {
                    Text("")
                }
                Spacer()
            }
            .onAppear {
                //print("PullToRefreshHack VIEW .onAppear is called")
            }
        }.padding(.top, -50)
    }
    
}

标签: iosswiftswiftuipull-to-refreshswiftui-navigationview

解决方案


推荐阅读