KafkaRefresh
动画、可定制和灵活的下拉刷新框架,旨在加快和简化 iOS 开发。
报告错误 · 请求功能 · 中文文档
状态
屏幕截图
KafkaRefreshStyle | 顶部截图 | 底部截图 |
原生 | ![]() |
![]() |
ReplicatorWoody | ![]() |
![]() |
ReplicatorAllen | ![]() |
![]() |
ReplicatorCircle | ![]() |
![]() |
ReplicatorDot | ![]() |
![]() |
ReplicatorArc | ![]() |
![]() |
ReplicatorTriangle | ![]() |
![]() |
AnimatableRing | ![]() |
![]() |
AnimatableArrow | ![]() |
![]() |
特性
-
内置丰富的动画样式,支持自定义
-
非刷新状态自动隐藏
为了避免开发者手动调整contentInset,刷新后控制器的视觉体验受到影响,刷新控件的 Appearance 会自动刷新;
最常见的情况是没有数据,刷新控件的底部不隐藏,使用 KafkaRefresh 避免这个问题。 -
刷新结束时抗锯齿
当刷新控件完成刷新后,如果 UIScrollView 处在滚动状态,KafkaRefresh 会根据刷新控件调整此时控制 UIScrollView 的 contntOffset;
-
支持设置偏移阈值以触发刷新
设置
stretchOffsetYAxisThreshold
的值可以控制刷新拉动距离。这个属性是相对于控件高度的比值,必须设置大于 1.0。 -
支持全局设置
KafkaRefreshDefaults 用于全局设置的单例
-
支持进度回调
实时回调拖拽偏移比例,根据动画调整进度。
-
自适应 contentInset 系统调整和人工调整
自适应于 UINavigationController 的 UIScrollView contentInset 属性调整,即使 contentInset 自动设置值,KafkaRefresh 仍能适应这种调整。
-
解决刷新时的分区视图浮动问题
-
支持横竖屏切换自适应
无需考虑横竖屏刷新时的刷新问题。
-
iOS 7+
支持 iOS 7 及以上系统。包括 iPhone X。
-
支持自动刷新
当用户滑动 scrollview 到底部时,会自动触发刷新,用户无需滑动到底部并向上拉动 scrollview。此功能默认不启用,因为大多数人在使用功能时不会查看文档。如果使用不当,很容易导致刷新停止。
使用预加载功能,请严格遵守以下要求
-
self.tableView.footRefreshControl.autoRefreshOnFoot = YES;
请设置 autoRefreshOnFoot 为 TRUE; -
在 refreshHandler 中,严格遵循以下逻辑!
if ({No data needs to be stitched}) { [weakSelf.tableView.footRefreshControl endRefreshingAndNoLongerRefreshingWithAlertText:@"no more"]; } else { [weakSelf.tableView.footRefreshControl endRefreshingWithAlertText:@"did load successfully" completion:nil]; }
-
-
文献覆盖率 100%
您可以在头文件中看到所有方法和类的使用。
安装
- CocoaPods
pod 'KafkaRefresh'
- Carthage
如果有人想要通过 carthage 安装,请提交一个 pull request。我自己并不使用这个包管理器。
使用方法
#import "KafkaRefresh.h"
初始化
- 第一种方法
#pragma mark - head
[self.tableView bindHeadRefreshHandler:^{
} themeColor:MainColor refreshStyle:KafkaRefreshStyleAnimatableArrow];
#pragma mark - foot
[self.tableView bindFootRefreshHandler:^{
} themeColor:MainColor refreshStyle:KafkaRefreshStyleAnimatableArrow];
#pragma mark - auto refresh
self.tableView.footRefreshControl.autoRefreshOnFoot = YES;
- 第二种方法
KafkaArrowHeader * arrow = [[KafkaArrowHeader alloc] init];
arrow.refreshHandler = ^{
//to do something...
};
self.tableView.headRefreshControl = arrow;
- 第三种方法(全局配置)
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[[KafkaRefreshDefaults standardRefreshDefaults] setHeaderDefaultStyle:KafkaRefreshStyleAnimatableRing];
return YES;
}
#pragma mark - global
[self.tableView bindGlobalStyleForFootRefreshHandler:^{
}];
手动触发刷新
[self.tableView.headRefreshControl beginRefreshing];
[self.tableView.footRefreshControl beginRefreshing];
结束刷新
当您完成刷新且不需要显示任何提示或动画时,请调用以下方法。
- (void)endRefreshing;
当您完成刷新并需要显示提示消息时,请调用以下方法。
- (void)endRefreshingWithAlertText:(NSString *)text completion:(dispatch_block_t)completion;
当您完成刷新且不再需要刷新时,请调用以下方法。
- (void)endRefreshingAndNoLongerRefreshingWithAlertText:(NSString *)text;
恢复刷新可用
/**
After you call ‘endRefreshingAndNoLongerRefreshingWithAlertText’,
you need to resume refresh available
*/
- (void)resumeRefreshAvailable;
自定义
以KafkaheadRefreshControl为例
#import "KafkaheadRefreshControl.h"
@interface CustomHeader : KafkafootRefreshControl
@end
@implementation CustomHeader
- (void)kafkaDidScrollWithProgress:(CGFloat)progress max:(const CGFloat)max{
//progress callback
}
- (void)kafkaRefreshStateDidChange:(KafkaRefreshState)state{
[super kafkaRefreshStateDidChange:state];
}
@end
注意事项
-
很多人问我一个问题:调用
insertRowAtIndexPath: withRowAnimation:
后tableView跳转,这不是KafkaRefresh的bug。当初始化tableView时设置tableView.estimatedRowHeight = UITableViewAutomaticDimension;
可以解决这个问题; -
请更新到最新版本!
通信
- 如果您需要帮助,请发送电子邮件至[email protected]。
- 如果您发现了一个bug,并且可以提供可靠重现它的步骤,请开启一个issue。
- 个人精力有限,Kafka提供了足够的回调接口以提高更丰富的UI效果,我们欢迎您一起加入并提交pull request。
许可
KafkaRefresh采用MIT许可发布。有关详细信息,请参阅LICENSE。