MJRefresh icon indicating copy to clipboard operation
MJRefresh copied to clipboard

SwiftUI 刷新动画直接消失

Open wsw-0906 opened this issue 1 month ago • 8 comments

描述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

  1. 显示哪个页面
  2. 点击哪个位置
  3. 滚动到哪个位置
  4. 发生了什么错误

你期望的结果是什么? 我希望下拉刷新或者加载更多能够等待数据加载完成动画再消失

截图

https://github.com/user-attachments/assets/3136fe46-1ef1-4bc6-bd40-773e1258ea5b

如果有必要的话,请上传几张截图

运行环境

  • iPhone6
  • iOS8.1
  • Xcode10

额外的 最好能提供出现bug的Demo

wsw-0906 avatar Nov 05 '25 06:11 wsw-0906

您好,邮件已收到。

gitph101 avatar Nov 05 '25 06:11 gitph101

有知道问题的前辈吗 是不是哪里还需要做设置

wsw-0906 avatar Nov 06 '25 02:11 wsw-0906

求助 还是没理解。ios 新手求助

wsw-0906 avatar Nov 07 '25 07:11 wsw-0906

还是没人吗?

wsw-0906 avatar Nov 10 '25 03:11 wsw-0906

传一个 demo 上来

wolfcon avatar Nov 11 '25 04:11 wolfcon

传一个演示上来

MJRegreshDemo.zip。 请求帮助

wsw-0906 avatar Nov 12 '25 08:11 wsw-0906

我也遇到了,SwiftUI中使用必现

ArturoYi avatar Nov 12 '25 09:11 ArturoYi

有解决办法了吗

wsw-0906 avatar Dec 03 '25 00:12 wsw-0906