ios - 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)
}
}
解决方案
推荐阅读
- sql-server - 需要确定我运行的 T-SQL 查询是否正在修改任何记录而无法访问日志
- php - (未定义的偏移量:0)无法生成更多数据进行故障排除
- webrtc - 保护我的网站免受虚假用户的侵害(网络摄像头)
- css - Yii2 Gridview - 水平顶部滚动条
- python-3.x - 如何使用机器人框架向命令提示符发送命令?
- c++ - 如何将字符串数组传递给 QtConcurrent::run?
- javascript - 如何实现重复的承诺调用链?
- sql - SQL Server:如何将 int 的值转换为 hh:mm
- mysql - SQLite 结果与 MySQL 结果不同
- ios - 如何使用特定用户的 uid 获取特定用户的数据?