SwiftUI 刷新动画直接消失
描述bug 查看视频,下拉刷新动画直接消失了 struct LibrarySongView: View { @StateObject private var viewModel = LibrarySongViewModel() @State private var scrollView: UIScrollView? // ✅ 保存 ScrollView 引用 @State private var currentPage: Int = 1 // ✅ 当前页码 var body: some View { ScrollView{ LazyVStack (spacing: 1){ if let songList = viewModel.librarySongList{ ForEach(songList) { songInfo in ExtractedView(songInfo: songInfo) } } } } .introspect( .scrollView, on: .iOS(.v13, .v14, .v15, .v16, .v17, .v18, .v26) ) { scrollView in // ✅ 捕获 ScrollView,只配置一次
// ✅ 关键设置
if #available(iOS 11.0, *) {
scrollView.contentInsetAdjustmentBehavior = .automatic
}
// ✅ 重置 contentInset,让系统自动计算
scrollView.contentInset = UIEdgeInsets.zero
configureMJRefresh(for: scrollView)
self.scrollView = scrollView
}
.background(Color(hexString: "#F4F4F4"))
}
// ✅ 配置 MJRefresh
private func configureMJRefresh(for scrollView: UIScrollView) {
// ✅ 下拉刷新
let header = MJRefreshNormalHeader { [weak scrollView] in
DispatchQueue.main.asyncAfter(deadline: .now() + 5) {
scrollView?.mj_header?.endRefreshing()
}
}
scrollView.mj_header = header
// 上拉加载更多
scrollView.mj_footer = MJRefreshAutoNormalFooter { [weak scrollView] in
Task { @MainActor in
print("⬇️ 上拉加载更多开始")
currentPage += 1
viewModel.getLibrarySongList(page: currentPage)
// 根据实际数据判断是否还有更多
if let list = viewModel.librarySongList, list.count >= 30 { // 假设最多30条
scrollView?.mj_footer?.endRefreshingWithNoMoreData()
} else {
await scrollView?.mj_footer?.endRefreshing()
}
}
}
}
}
必现/偶发? 必现
怎么样重现这个bug
- 显示哪个页面
- 点击哪个位置
- 滚动到哪个位置
- 发生了什么错误
你期望的结果是什么? 我希望下拉刷新或者加载更多能够等待数据加载完成动画再消失
截图
https://github.com/user-attachments/assets/3136fe46-1ef1-4bc6-bd40-773e1258ea5b
如果有必要的话,请上传几张截图
运行环境
- iPhone6
- iOS8.1
- Xcode10
额外的 最好能提供出现bug的Demo
您好,邮件已收到。
有知道问题的前辈吗 是不是哪里还需要做设置
求助 还是没理解。ios 新手求助
还是没人吗?
传一个 demo 上来
我也遇到了,SwiftUI中使用必现
有解决办法了吗