Skip to content

解决MJRefreshHeader中异步更改UI为Refreshing状态导致内部状态和UI状态不一致的问题#759

Open
myronlee wants to merge 1 commit into
CoderMJLee:masterfrom
myronlee:master
Open

解决MJRefreshHeader中异步更改UI为Refreshing状态导致内部状态和UI状态不一致的问题#759
myronlee wants to merge 1 commit into
CoderMJLee:masterfrom
myronlee:master

Conversation

@myronlee

Copy link
Copy Markdown

详细描述可见我的博客文章
http://www.jianshu.com/p/0ecaf3d67940

在MJRefreshHeader类setState方法中“更改UI为refreshing状态”的操作是异步的。也就是说,设置Refreshing状态时,设置内部状态和设置UI状态被分离开了,如果在中间插入了设置内部状态(比如Idle)的操作可能会导致内部状态和UI状态不一致的问题。另外,MJRefreshendRefreshing方法中“设置状态为Idle”操作是异步的。
出现问题的原因就是两次异步,由于执行顺序的原因,导致内部状态和UI状态不一致。

设置refreshing状态如果需要异步,应该像设置idle状态一样,整体异步(beginRefreshing应该参考endRefreshing的实现,需要异步的话)这边不了解,可以自行修改

setSate中同步更改UI状态,异步更改UI状态将有可能导致“内部状态和UI状态不一致”的问题,如果中间设置state为idle的话(idle
状态更改UI状态是同步的)。
@sh0rt2020

Copy link
Copy Markdown

我的项目里面用了最新的MJRefresh,但是首次进入页面的时候,UITableView顶部就会有刷新提示显示出来,但是这时候并没有在刷新。。。
当我继续下拉的时候才会触发刷新动作,也就是UITableView的顶部多出了一块。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

2 participants