- 采用UICollectionView+UIPageViewController方案,高性能,低功耗。
- 支持刷新,内置缓存(非复用)机制,节省内存。
- 默认配置样式丰富,可实现大部分主流App样式。
- 支持用户自定义标题样式。
App | 示例 |
---|---|
今日头条 | ![]() |
腾讯新闻 | ![]() |
澎湃新闻 | ![]() |
爱奇艺 | ![]() |
优酷 | ![]() |
腾讯视频 | ![]() |
网易新闻 | ![]() |
人民日报 | ![]() |
功能 | 示例 |
---|---|
基本样式-标题正常显示 | ![]() |
基本样式-标题显示在导航栏上 | ![]() |
Segmented样式-标题正常显示 | ![]() |
Segmented样式-标题显示在导航栏上 | ![]() |
标题栏-局左 | ![]() |
标题栏-局中 | ![]() |
标题栏-局右 | ![]() |
标题-自定义宽度 | ![]() |
标题-自定义高度 | ![]() |
标题-文字局上 | ![]() |
标题-文字居下 | ![]() |
标题-关闭标题颜色过渡 | ![]() |
阴影动画-缩放 | ![]() |
阴影动画-无 | ![]() |
阴影末端形状-圆角 | ![]() |
阴影末端形状-直角 | ![]() |
阴影-居上 | ![]() |
阴影-居中 | ![]() |
场景 | 示例 |
---|---|
自定义Cell | ![]() |
频道定制 | ![]() |
多级嵌套 | ![]() |
子View滚动冲突 | ![]() |
手动切换 | ![]() |
#import "XLPageViewController.h"
@interface ViewController ()<XLPageViewControllerDelegate,XLPageViewControllerDataSrouce>
注:config负责所有的外观配置,defaultConfig
方法设定了默认参数,使用时可按需配置。 Config属性列表
XLPageViewControllerConfig *config = [XLPageViewControllerConfig defaultConfig];
注:需要把pageViewController
添加为当前视图控制器的子试图控制器,才能实现pageViewController
子试图控制器中的界面跳转。
XLPageViewController *pageViewController = [[XLPageViewController alloc] initWithConfig:config];
pageViewController.view.frame = self.view.bounds;
pageViewController.delegate = self;
pageViewController.dataSource = self;
[self.view addSubview:pageViewController.view];
[self addChildViewController:pageViewController];
//位置回调方法:回调切换位置
- (void)pageViewController:(XLPageViewController *)pageViewController didSelectedAtIndex:(NSInteger)index;
//根据index创建对应的视图控制器,每个试图控制器只会被创建一次。
- (UIViewController *)pageViewController:(XLPageViewController *)pageViewController viewControllerForIndex:(NSInteger)index;
//根据index返回对应的标题
- (NSString *)pageViewController:(XLPageViewController *)pageViewController titleForIndex:(NSInteger)index;
//返回分页数
- (NSInteger)pageViewControllerNumberOfPage;
//标题cell复用方法,自定义标题cell时用到
- (__kindof XLPageTitleCell *)pageViewController:(XLPageViewController *)pageViewController titleViewCellForItemAtIndex:(NSInteger)index;
#import "XLPageTitleCell.h"
@interface CustomPageTitleCell : XLPageTitleCell
@end
[self.pageViewController registerClass:CustomPageTitleCell.class forTitleViewCellWithReuseIdentifier:@"CustomPageTitleCell"];
- (XLPageTitleCell *)pageViewController:(XLPageViewController *)pageViewController titleViewCellForItemAtIndex:(NSInteger)index {
CustomPageTitleCell *cell = [pageViewController dequeueReusableTitleViewCellWithIdentifier:@"CustomPageTitleCell" forIndex:index];
return cell;
}
//通过此父类方法配置cell是否被选中样式
- (void)configCellOfSelected:(BOOL)selected {
}
//通过此父类方法配置cell动画 type:区分是当前选中cell/将要被选中的cell progress,动画进度0~1
- (void)showAnimationOfProgress:(CGFloat)progress type:(XLPageTitleCellAnimationType)type {
}
当pageViewController
的子视图中存可滚动的子view,例如UISlider、UIScrollView等,如果子view和pageViewController
发生滚动冲突时,可设置子view的xl_letMeScrollFirst
属性为true。
slider.xl_letMeScrollFirst = true;
-
频道管理工具XLChannelControl
-
开发过的其他UI工具XLUIKit