mjrefresh停止刷新在没有数据时关闭上拉刷新怎么做?有这个功能吗

MJRefresh上拉下刷新的基本原理 - 简书
MJRefresh上拉下刷新的基本原理
Idle 闲置状态pulling 松开就可以进行刷新的状态refreshing 正在刷新状态初始状态:
header:Idlefooter:Idleheader的状态变化header在拖动中显示出来:
拖拽下拉时使header开始出现在屏幕上header开始出现 -& header完全出现在屏幕上:Idle -& Pullingheader完全出现 -& header部分出现在屏幕上:Pulling -& Idle拖曳结束时(松手时):
这时是在Pulling状态松手,所以状态由:Pulling -& Refreshing如果是在Idle状态下松手,状态不改变。footer的状态变化
将要出现footer,此时footer状态为Idle
footer由开始出现 -& footer完全出现:Idle -& Pullingfooter由完全出现 -& footer部分出现:Pulling -& Idle拖曳结束时(松手时):
这是在Pulling状态下松的手,所以状态由:Pulling -& Refreshing如果是在Idle状态下松的手,状态不变。header和footer的实现初始位置确定:从原始状态可以看出:header是scrollView的subView,它的frame.y为-header.frame.height。footer也是scrollView的subView,它的frame.y分为两种情况:当contentSize.height & scrollView.frame.height时,footer.frame.y为contentSize.height当contentSize.height & scrollView.frame.height时,footer.frame.y为scrollView.frame.height总而言之footer一定在scrollView的下方。上面是最简单的情况分析,可是现实中往往是下面这样:
以上的示意图可以设想一下,一个tableViewController嵌入在navigationController中,navigationController又嵌入在tabbarController中。此时tableViewController的tableView的contentInset属性为(64,0,49,0),contentOffset为(0,-64)。64是状态栏加导航栏的高度,49是tabbar的高度。这是tableViewController默认设的一些值。因此添加footer时要考虑oringinalInsets,把当contentSize.height & scrollView.frame.height时,footer.frame.y为scrollView.frame.height改为:当contentSize.height & scrollView.frame.height时,footer.frame.y为scrollView.frame.height - originalInsets.top - originalInsets.bottom下面临界值的确定都要考虑originalInsets临界值确定确定了初始的位置后,要确定状态之间变换的临界线,通过KVO,监听scrollView的contentOffset的变化。header临界值:contentOffset.y & -originalInsets.top时,才开始显示headercontentOffset.y &= -originalInsets.top - header.frame.size.height时,才完全显示headerfooter的临界值:当contentSize.height大于showHeight时:contentOffset.y & scrollView.frame.size.height - showHeight - originalInsets.top时才开始显示footer。contentOffset.y & scrollView.frame.size.height - showHeight - originalInsets.top + footer.frame.size.height时才完全显示footer当contentSize.height小于showHeight时:contentOffset.y & -originalInsets.top时就开始显示footer。contentOffset.y & -originalInsets.top + footer.frame.size.height时才完全显示footer。悬浮状态的实现header的悬浮12scrollView.contentInsets.top = header.frame.size.height + originalInsets.topscrollView.contentOffset.y = - (scrollView.contentInsets.top)header的隐藏12scrollView.contentInset.top = originalInsets.topscrollView.contentOffset.y = -(scrollView.contentInsets.top)footer的悬浮当contentSize.height大于showHeight时:
1scrollView.contentInsets.bottom = footer.frame.size.height + originalInsets.bottom2scrollView.contentOffset.y = contentSize.height - showHeight - originalInsets.top + footer.frame.size.height当contentSize.height小于showHeight时:
scrollView.contentInsets.bottom = bottom + showHeight - contentSize.height可以理解成初始的contentOffset.y为-originalInsets.top,然后向上移动了footer.frame.size.height:scrollView.contentOffset.y = -originalInsets.top + footer.frame.size.heightfooter的隐藏scrollVIew.contentInsets.bottom = originalInsets.bottom当contentSize.height & showHeight时:scrollView.contentOffset.y = contentSize.height - showHeight - originalInsets.top当contentSize.height & showHeight时:scrollView.conentOffset.y = -originalInsets.topUIScrollView属性详解:坐标系正方向:
ContentOffset的表示:
ContentInsets的表示:contentInsets并不影响contentSize:
contentInsets影响contentOffset:
上图的contentOffset为(-contentInsets.left, -contentInsets.top)
上图的contentOffset为(contentSize.width - scrollView.frame.size.width + contentInsets.right, contentSize.height - scrollView.frame.size.height + contentInsets.bottom)其实contentInsets就是为scrollView提供了更多的可停留空间,切记要把弹簧效果开启,否则在contentSize小于scrollView.frame时scrollView无法拉动。scrollView.alwaysBounceVertical = YES;self.scrollView.alwaysBounceHorizontal = YES;在没有设置contentInsets的情况下,scrollView的停留范围为:contentOffset.x: 0 -& max(contentSize.width - scrollView.frame.width, 0)contentOffset.y: 0 -& max(contentSize.height - scrollView.frame.height, 0)在有contentInsets的情况下,scrollView的停留范围为:contentOffset.x: -contentInsets.left -& max(contentSIze.width - scrollView.frame.size.width) + contentInsets.rightcontentOffset.y: -contentInsets.top -& max(contentSIze.height - scrollView.frame.size.height) + contentInsets.bottom地址
你一定要努力,但千万别着急Pages: 1/3
主题 : MJRefresh上拉加载功能,每次运行下面都会有“上拉加载”这句话,怎么去掉?
级别: 侠客
可可豆: 444 CB
威望: 434 点
在线时间: 310(时)
发自: Web Page
来源于&&分类
MJRefresh上拉加载功能,每次运行下面都会有“上拉加载”这句话,怎么去掉?&&&
MJRefresh上拉加载功能,每次运行下面都会有“上拉加载”这句话,试了隐藏footer结果上拉加载这个功能都没了,要怎么才能去掉啊?求高手指点!!
图片:A.png
级别: 侠客
UID: 471816
可可豆: 481 CB
威望: 358 点
在线时间: 326(时)
发自: Web Page
换个创建方法就好啦&&&&// 上拉刷新&&&&self.tableView.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingBlock:^{&&&&&&&&// 加载旧的数据,加载旧的未显示的数据&&&&&&&&[self loadOldDatas];&&&&}];
图片:funny.gif
It's time to turn.
级别: 精灵王
UID: 562380
可可豆: 2372 CB
威望: 1879 点
在线时间: 1039(时)
发自: Web Page
NSString *const MJRefreshHeaderIdleText = @&下拉可以刷新&;NSString *const MJRefreshHeaderPullingText = @&松开立即刷新&;NSString *const MJRefreshHeaderRefreshingText = @&正在刷新数据中...&;NSString *const MJRefreshAutoFooterIdleText = @&点击或上拉加载更多&;NSString *const MJRefreshAutoFooterRefreshingText = @&正在加载更多的数据...&;NSString *const MJRefreshAutoFooterNoMoreDataText = @&已经全部加载完毕&;NSString *const MJRefreshBackFooterIdleText = @&上拉可以加载更多&;NSString *const MJRefreshBackFooterPullingText = @&松开立即加载更多&;NSString *const MJRefreshBackFooterRefreshingText = @&正在加载更多的数据...&;NSString *const MJRefreshBackFooterNoMoreDataText = @&已经全部加载完毕&;第三方里的提示字段都可以更改的,改成nil
真正为理想奔忙的人,是没有精力去吐槽的;不停抱怨却又不肯改变的样子,真的很丑;所有不能解决问题的抱怨,都是在浪费时间.
级别: 侠客
UID: 564886
可可豆: 369 CB
威望: 300 点
在线时间: 501(时)
发自: Web Page
全局搜索关键字,搜到后改一下就好了
级别: 侠客
可可豆: 444 CB
威望: 434 点
在线时间: 310(时)
发自: Web Page
回 3楼(大流氓兔子爱泡芙) 的帖子
我全局搜索了,而且注释掉之后,运行再上拉就不加载数据了。。。
级别: 侠客
UID: 564886
可可豆: 369 CB
威望: 300 点
在线时间: 501(时)
发自: Web Page
回 4楼(SunHeartGirl) 的帖子
当然不能注释掉,改成@“”
级别: 侠客
可可豆: 444 CB
威望: 434 点
在线时间: 310(时)
发自: Web Page
回 2楼(wo) 的帖子
项目要求是运行出来十条数据不足以占据全屏,这时候不要显示“点击或上拉加载更多”这句话,但用户上拉时还要显示正在加载的字样~我试试设置为nil吧~
级别: 侠客
可可豆: 444 CB
威望: 434 点
在线时间: 310(时)
发自: Web Page
回 5楼(大流氓兔子爱泡芙) 的帖子
我把上拉加载那句话写成@&&,可是运行出来是这样的。。[ 此帖被SunHeartGirl在 14:54重新编辑 ]
图片:ee.png
级别: 侠客
可可豆: 444 CB
威望: 434 点
在线时间: 310(时)
发自: Web Page
回 7楼(SunHeartGirl) 的帖子
解决啦~改这一句,其他都不用动就可以啦~NSString *const MJRefreshAutoFooterIdleText = @&&;谢谢啦~
级别: 侠客
UID: 564886
可可豆: 369 CB
威望: 300 点
在线时间: 501(时)
发自: Web Page
回 7楼(SunHeartGirl) 的帖子
终于改好了你,再不会的话就差改好给你截图了
Pages: 1/3
关注本帖(如果有新回复会站内信通知您)
苹果公司现任CEO是谁?2字 正确答案:库克
发帖、回帖都会得到可观的积分奖励。
按"Ctrl+Enter"直接提交
关注CocoaChina
关注微信 每日推荐
扫一扫 浏览移动版iOS MJRefresh下拉刷新 上拉加载(可添加gif图版) 小结
1.首先去github上下载最新版 MJ刷新库 下载MJ链接
2.tableVIew中加入相关代码
_tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, MCAPPWidth, MCAPPHeight - 64)];
_tableView.backgroundColor = myClearC
_tableView.separatorStyle = UITableViewCellSeparatorStyleN
_tableView.delegate =
_tableView.dataSource =
_tableView.showsVerticalScrollIndicator = NO;
_tableView.scrollsToTop = YES;
[self.view addSubview:_tableView];
[_tableView addGifHeaderWithRefreshingTarget:self refreshingAction:@selector(loadData)];
[_tableView addGifFooterWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
[self gif];
//loadData 为你下拉刷新时请求网络数据的方法 loadMoreData为你上拉加载时请求网络数据的方法
3. [self gif]
- (void)gif
NSMutableArray *idleImages = [NSMutableArray array];
//这块为你刷新时出现的gif图 需要循环添加到数组中
for (NSUInteger i = 1; i &= 5; i++) {
UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@img_loading-%lu.png, (unsigned long)i]];
[idleImages addObject:image];
[_tableView.gifHeader setImages:idleImages forState:MJRefreshHeaderStateIdle];
_tableView.gifFooter.refreshingImages = idleI
_tableView.gifHeader.updatedTimeHidden = YES;
// 设置即将刷新状态的动画图片(一松开就会刷新的状态)
NSMutableArray *refreshingImages = [NSMutableArray array];
for (NSUInteger i = 1; i &= 5; i++) {
UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@img_loading-%lu.png, (unsigned long)i]];
[refreshingImages addObject:image];
[_tableView.gifHeader setImages:refreshingImages forState:MJRefreshHeaderStatePulling];
4. 自定义刷新时顶部底部出现的Label和gif图的frame 这里举footer的例子
MJRefreshGifFooter.m
- (void)layoutSubviews
[super layoutSubviews];
// 指示器 gif图的frame
self.gifView.frame = CGRectMake(self.bounds.origin.x + 20, self.bounds.origin.y + 15, self.bounds.size.width / 2, self.bounds.size.height / 2);
if (self.stateHidden) {
self.gifView.contentMode = UIViewContentModeC
self.gifView.contentMode = UIViewContentModeScaleAspectF
self.gifView.mj_w = self.mj_w * 0.5 - 90;
MJRefreshFooter.m
- (void)layoutSubviews
[super layoutSubviews];
self.loadMoreButton.frame = self.
self.loadMoreButton.hidden = YES;
//Label的frame
self.stateLabel.frame = CGRectMake(self.bounds.origin.x, self.bounds.origin.y + 15, self.bounds.size.width, self.bounds.size.height / 2);
self.noMoreLabel.frame = self.
同理header的gif图frame 和Labelframe 都在相应的类里的方法里 都可以根据需求去修改
更多的设置可以看下MJ在github上相关的文档。使用MJRefresh实现上拉加载,下拉刷新功能!!
注:本文转自于 & 先关连接:
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。Pages: 1/2
主题 : MJRefresh上拉刷新不显示刷新控件,你们遇到过么?
级别: 侠客
UID: 350209
可可豆: 596 CB
威望: 607 点
在线时间: 333(时)
发自: Web Page
来源于&&分类
MJRefresh上拉刷新不显示刷新控件,你们遇到过么?&&&
对UICollectionView我设置了:&&&&self.collectionView.footer = [MJRefreshAutoFooter footerWithRefreshingTarget:self refreshingAction:@selector(pullUpRefresh)];然后上拉刷新的时候没有显示刷新控件,但是实际上确实刷新了(因为调用了pullUpRefresh这个选择器中的方法)还有对于UITableView,我设置了:self.tableView.footer = [MJRefreshAutoNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(mjRefreshLoadMoreData)];发现刷新的时候这个控件显示位置不在底部,然后过了很长时间它又自动调回到底部位置你们有遇到过这种问题么?下拉刷新这个控件都是没问题的。
级别: 侠客
UID: 350209
可可豆: 596 CB
威望: 607 点
在线时间: 333(时)
发自: Web Page
顶顶顶顶顶顶
级别: 侠客
可可豆: 1092 CB
威望: 1093 点
在线时间: 492(时)
发自: Web Page
不要用那个基础类,用其它的,比如tvList.mj_header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(headRefresh)];&&&&tvList.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(footRefresh)];就会显示了。这个问题有点坑!
级别: 新手上路
可可豆: 1 CB
威望: 1 点
在线时间: 10(时)
发自: Web Page
&&楼主解决了吗,我也遇到这个问题,找来找去都找不到,用的是mj_footer
级别: 新手上路
UID: 502037
可可豆: 12 CB
威望: 9 点
在线时间: 42(时)
发自: Web Page
我也遇到这个问题了,是xib 的scrollview 使用的这个基础头方法&&&&[MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(headRefresh)];
级别: 新手上路
可可豆: 5 CB
威望: 5 点
在线时间: 151(时)
发自: Web Page
回 4楼(hccgk) 的帖子
哥们解决了吗?我也遇到 了
级别: 新手上路
可可豆: 5 CB
威望: 5 点
在线时间: 151(时)
发自: Web Page
回 楼主(abcfleeting) 的帖子
我这上拉加载不显示加载控件,你解决了吗?
级别: 新手上路
可可豆: 2 CB
威望: 2 点
在线时间: 235(时)
发自: Web Page
请问楼主解决了吗 ?
级别: 版主
UID: 123750
发帖: 2040
可可豆: 3424 CB
威望: 3345 点
在线时间: 1461(时)
发自: Web Page
别人控件不更新了/出问题了 就没辙了。。。连最基础的ui 都搞不好,也不知道整天第三方第三方的,app难道是用“第三方”堆砌起来的?能不能又点自己的东西?整天论坛上发帖:又有半月闲着没事干了,不知道该干嘛。 你是真没事干了?有没有研究过af框架?有没有研究过yymodel? 算了 肯定没有   但是这些简单ui 你总要去看一眼别人怎么实现的吧?开源的,等到真用到那一天,不会二逼一样的跑论坛上问这样毫无干货可言的问题没经验不可怕。怕的是你平时不知道自己学习,不知积累,不知独立思考,不知自己亲自动手一切都是嗟来之食个人竞争力从哪来?好好思考下这段话
级别: 精灵王
UID: 512733
可可豆: 2267 CB
威望: 1755 点
在线时间: 949(时)
发自: Web Page
回 8楼(wszcug) 的帖子
66666&&显示禁用XIB&&SB&&现在来教新手做人,哈哈哈哈哈
Pages: 1/2
关注本帖(如果有新回复会站内信通知您)
苹果公司现任CEO是谁?2字 正确答案:库克
发帖、回帖都会得到可观的积分奖励。
按"Ctrl+Enter"直接提交
关注CocoaChina
关注微信 每日推荐
扫一扫 浏览移动版}

我要回帖

更多关于 mjrefresh停止刷新 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信