使用第三方Refresh控件都与遇到的问题 --SVPullToRefresh

本文介绍了使用SVPullToRefresh作为刷新控件的优点,并详细讨论了在实现上拉刷新和下拉加载过程中遇到的本地化问题和布局偏移问题。通过分析源代码和生命周期,提出了在viewDidLayoutSubviews中添加刷新控件以解决布局问题的解决方案,加深了对UIViewController布局流程的理解。
摘要由CSDN通过智能技术生成

SVPullToRefresh
最近把项目里面的MJRefresh 换成了SVPullToRefresh, 不得不说的是,SVPullToRefresh 是我见过最好用最省事的一个刷新控件,添加上拉刷新和下拉加载就一句话。

添加上拉刷新

- (void)addPullToRefreshWithActionHandler:(void (^)(void))actionHandler;

添加下拉加载

- (void)addInfiniteScrollingWithActionHandler:(void (^)(void))actionHandler;

下面说说在用它的时候,主要遇到的问题。

1.内容本地化,在类UIScrollView+SVPullToRefresh.m中,都是用的NSLocalizedString 显示的提示语,例如,pulltofresh...,loading..., 我们可以通过invoke - (void)setTitle:(NSString *)title forState:(SVPullToRefreshState)state;
这个函数,去改变它在不同的状态显示不同的中文,例如加载中…, 下拉刷新…, 释放即可更新, 其实大可不必这么麻烦, 不然在每个用到它的地方都需要写上三句话,你需要做的就是创建一个Localizable.strings 的类,将用到的提示语进行本地化,尽管你是用cocoapod 第三方导入的,这种方式依然是可以让它 的内容本地化。

2.在 UIViewControl 视图中添加sv 刷新控件,在 viewDidload()方法里面添加 addpulltorefresh, 整个视图会往上偏移64像素。解决方式:
1.如果是在 viewDidload 中调用 addPullToRefreshWithActionHandler 方法, 并且当前的类继承 UITableViewControl 或者 UICollectionViewControl,可以设置 self.tableView.contentInset = UIEdgeInsetsMake(64, 0, 0, 0);
,这样设置后,解决了 SVPullToRefresh偏移像素的问题,并且导航栏还是透明的效果还是在的,因为此时 self.edgesForExtendedLayout依旧是默认的 UIRectEdgeAll(这里说的都是针对iOS 7+) ,所以 self.tableview.frame 还是整个屏幕,包括了状态栏和导航栏,所以现在的导航栏还会透明,就是这个原因了。
UITableViewControl 在UIRectEdgeAll情况下的frame

2.将当前的self.edgesForExtendedLayout 设为UIRectEdgeNone,也就是当前的self.tableview.frame 是从导航栏下面开始算起的,这时你的内容根本都不会滑动到导航栏下面去,就别说什么导航栏透明的效果了。UIRectEdgeNone, 所以如果是遇到需要将内容显示在导航栏下方,并需要看起来有透明层效果的人,谨慎用这种方法。如果你不了解edgesForExtendedLayout 可以看看它的官方文档。这种方式只是解决因为添加刷新控件带来的偏移问题,为了解决问题而解决问题。


探其究竟,和正确的解决方式。
如果你当前的视图是UICollectionViewControl 或者UITableViewControl,在没有添加addPull...之前,整个视图都是正常的,self.tableView能显示在正确的位置,edgesForExtendedLayout 是默认的UIRectEdgeAll,一切正常,而自从你在viewDidLoad 里 面,添加了如下代码

- (void)viewDidLoad {
    [super viewDidLoad];
    [self setupDataSource];
        __w
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值