-
Notifications
You must be signed in to change notification settings - Fork 3.5k
Open
Labels
Description
描述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
- 显示哪个页面
- 点击哪个位置
- 滚动到哪个位置
- 发生了什么错误
你期望的结果是什么?
我希望下拉刷新或者加载更多能够等待数据加载完成动画再消失
截图
2025-11-11.14.11.12.mp4
如果有必要的话,请上传几张截图
运行环境
- iPhone6
- iOS8.1
- Xcode10
额外的
最好能提供出现bug的Demo