CoderMJLee / MJRefresh

An easy way to use pull-to-refresh.
MIT License
13.79k stars 3.55k forks source link

隐藏的tableview触发下拉刷新后,刷新控件丢失了,再也无法刷新。 #1611

Closed zakicheung closed 4 weeks ago

zakicheung commented 1 month ago

描述bug 隐藏的tableview触发下拉刷新后,刷新控件丢失了,再也无法刷新。

必现/偶发? 必现

怎么样重现这个bug 1、假定app tabbarctrl 存在2个tab 2、tab1 的root 是由多个tableview组成,当其中1个显示时,其他为隐藏状态 3、来到tab2,触发了某个动作(如账户信息变化),通知tab1的所有tableview下拉刷新 4、回到tab1,当前显示的tableview会下拉刷新,切换到其他隐藏tableview,则无法下拉刷新。

TestMJ.zip 20240719-173228

https://github.com/user-attachments/assets/ba35a3c9-53c5-46b9-a0d0-f7bcb91d6c59

gitph101 commented 1 month ago

您好,邮件已收到。

309598016 commented 1 month ago

这是来自QQ邮箱的假期自动回复邮件。   您好,我最近正在休假中,无法亲自回复您的邮件。我将在假期结束后,尽快给您回复。

zakicheung commented 1 month ago

在我提供的最小化demo中,如果额外增加注释后的执行语句setNeedsDisplay可以解决问题,因为触发了控件的drawRect,里面对待刷新态更新为刷新态。

    @IBAction func shift(_ sender: Any) {
        tableA.isHidden.toggle()
        tableB.isHidden.toggle()
        if !tableA.isHidden {
            tableA.mj_header?.setNeedsDisplay()
        }
        if !tableB.isHidden {
            tableB.mj_header?.setNeedsDisplay()
        }
    }
zakicheung commented 4 weeks ago

是table放置在水平的stackview中才引发这个问题