分页控制器,替换UIPageController方案,具备完整的生命周期,多种指示器样式,多种标题样式,可悬浮,支持ios13暗黑模式(仿优酷,爱奇艺,今日头条,简书,京东等多种标题菜单) (Pagination controller with full life cycle, multiple indicator styles, multiple title styles)
MIT License
//自定义整体距离顶部的位置(如果默认算的不准确 或者需要修改) block内会传回当前的值 可对比自行返回最终需要的
WMZPagePropStatementAndPropSetFuncStatement(copy, WMZPageParam, PageCustomFrameY, wCustomNaviBarY)
//自定义整体距离底部的位置(如果默认算的不准确 或者需要修改) block内会传回当前的值 可对比自行返回最终需要的
WMZPagePropStatementAndPropSetFuncStatement(copy, WMZPageParam, PageCustomFrameY, wCustomTabbarY)
//自定义底部滚动视图的高度(如果默认算的不准确 或者需要修改)可作为改变悬浮菜单栏的位置 block内会传回当前的值 可对比自行返回最终需要的
WMZPagePropStatementAndPropSetFuncStatement(copy, WMZPageParam, PageCustomFrameY, wCustomDataViewHeight)
动画样式 | 作用 (默认值) |
---|---|
AQY样式 | |
PDD样式 | |
TT样式 | |
JD样式 | |
QQ样式 | |
圆角框 |
标题样式 | 作用 (默认值) |
---|---|
红点 | |
富文本 | |
固定宽度 | |
图文 | |
固定右边 | |
自定义标题样式 | |
自定义导航栏 |
悬浮样式 | 作用 (默认值) |
---|---|
悬浮导航栏透明度不变化+刷新在中间 | |
悬浮导航栏透明度变化+刷新在顶部 | |
固定底部 | |
头部放大 | |
自定义复杂嵌套悬浮UI |
样式 | 作用 (默认值) |
---|---|
wb | |
三层(王者营地) | |
双重 | |
顶掉父菜单 |
###特殊使用
样式 | 作用 (默认值) |
---|---|
作为tabbar使用 | |
淘宝首页效果 | |
美团外卖商家详情效果(子控制器多级联动) | |
菜单标题跟随内容滑动 |
替换UIPageController是用UIScrollView替换,手势滑动从而实现完整生命周期
/// 悬浮 两者一样 下面的只是为了减少非tableview的警告
- (UIScrollView*)getMyScrollView;
/// 悬浮 数组 可滚动视图的数组 适用底部多个scrollView的情况
- (NSArray <UIScrollView*>*)getMyScrollViews;
/// 子控制器需要固定的尾部视图
- (UIView*)fixFooterView;
/// 生命周期 和VC的生命周期用法一致
- (void)pageViewWillAppear;
- (void)pageViewWillDisappear;
- (void)pageViewDidAppear;
- (void)pageViewDidDisappear;
///系统生命周期方法
- (void)viewWillAppear:(BOOL)animated
- (void)viewDidAppear:(BOOL)animated
- (void)viewWillDisappear:(BOOL)animated
- (void)viewDidDisappear:(BOOL)animated
(两者都会触发 只实现一个即可)
- (void)pageViewWillAppear;
- (void)pageViewWillDisappear;
- (void)pageViewDidAppear;
- (void)pageViewDidDisappear;
WMZPageParam *param = PageParam()
.wTitleArrSet(@[@"推荐",@"LOOK直播",@"画",@"现场",@"翻唱",@"MV",@"广场",@"游戏"])
.wViewController = ^UIViewController * _Nullable(NSInteger index) {
return NSClassFromString(@"TestVC").new;
}
.wNaviAlphaSet(NO)
.wFromNaviSet(YES)
.wTopSuspensionSet(YES)
WMZPageParam *param = WMZPageParam.new;
param.wTitleArr = @[@"推荐",@"LOOK直播",@"画",@"现场",@"翻唱",@"MV",@"广场",@"游戏"]
param.wViewController = ^UIViewController * _Nullable(NSInteger index) {
return NSClassFromString(@"TestVC").new;
};
param.wTopSuspension = YES;
/// 例如
@[
@{WMZPageKeyName:@"标题",WMZPageKeySelectName:@"选中标题",WMZPageKeyBadge:@(YES)},
@{WMZPageKeyName:@"标题",WMZPageKeySelectName:@"选中标题",WMZPageKeyBadge:@(YES)}
@{WMZPageKeyName:@"标题",WMZPageKeySelectName:@"选中标题",WMZPageKeyBadge:@(YES)}
]
// 红点提示 @(YES) 或者 带数字 @(99) @"99+" wCustomRedView使用这个属性可以调整角标的位置和样式
FOUNDATION_EXPORT WMZPageBTNKey const WMZPageKeyBadge;
/// 标题 NSString/NSAttributedString 支持传入富文本
/// 如果此处传入富文本则WMZPageKeySelectName 也需要传入 此时设置的选中标题title font uicolor会失效
FOUNDATION_EXPORT WMZPageBTNKey const WMZPageKeyName;
/// 选中后标题 NSString/NSAttributedString 支持传入富文本
FOUNDATION_EXPORT WMZPageBTNKey const WMZPageKeySelectName;
/// 指示器颜色 UIColor
FOUNDATION_EXPORT WMZPageBTNKey const WMZPageKeyIndicatorColor;
/// 字体颜色 UIColor
FOUNDATION_EXPORT WMZPageBTNKey const WMZPageKeyTitleColor;
/// 选中字体颜色 UIColor
FOUNDATION_EXPORT WMZPageBTNKey const WMZPageKeyTitleSelectColor;
/// 图片 NSString/UIImage
FOUNDATION_EXPORT WMZPageBTNKey const WMZPageKeyImage;
/// 选中后图片 NSString/UIImage
FOUNDATION_EXPORT WMZPageBTNKey const WMZPageKeySelectImage;
/// 选中背景颜色 [UIColor redColor] (如果是数组则是背景色渐变色) @[[UIColor redColor],[UIColor orangeColor]]
FOUNDATION_EXPORT WMZPageBTNKey const WMZPageKeyBackgroundColor;
/// 标题背景颜色 UIColor
FOUNDATION_EXPORT WMZPageBTNKey const WMZPageKeyTitleBackground;
/// 图文距离 @(5)
FOUNDATION_EXPORT WMZPageBTNKey const WMZPageKeyImageOffset;
/// 仅点击页面不加载 @(YES)
FOUNDATION_EXPORT WMZPageBTNKey const WMZPageKeyOnlyClick;
/// 自定义标题宽度(优先级最高) @(100)
FOUNDATION_EXPORT WMZPageBTNKey const WMZPageKeyTitleWidth;
/// 自定义标题高度(优先级最高) @(100)
FOUNDATION_EXPORT WMZPageBTNKey const WMZPageKeyTitleHeight;
/// 自定义标题x间距(优先级最高) @(100)
FOUNDATION_EXPORT WMZPageBTNKey const WMZPageKeyTitleMarginX;
/// 自定义标题y坐标(优先级最高) @(100)
FOUNDATION_EXPORT WMZPageBTNKey const WMZPageKeyTitleMarginY;
/// 当前子控制器不悬浮固定在顶部 @(NO) NO表示不悬浮
FOUNDATION_EXPORT WMZPageBTNKey const WMZPageKeyCanTopSuspension;
Model *model = Moded.new
model.name = @"标题";
self.param.wTitleArr = @[model,model,model]
self.param.wCustomTitleContentSet(^NSString * _Nullable(id _Nullable model, NSInteger index) {
return model.name;
})
无任何依赖
pod 'WMZPageController'
。pod install
或 pod update
。该库最低支持 iOS 9.0
和 Xcode 9.0
。
WMZPageControlller 使用 MIT 许可证,详情见 LICENSE 文件。
使用过程中如果有什么bug欢迎给我提issue 我看到就会解决 我的简书
1 问:设置了wTopSuspension为什么没有底部没有滑动?
答:先看看子控制器有没有实现WMZPageProtocol协议返回可滚动的视图,再看看子控制器是否自己实现了didscroll等的滑动代理方法把库内的方法覆盖掉了
2 问:怎么设置标题的风格,红点等怎么展示
答:在传值wTitleArr的时候 把标题字符串换成字典
3 问:距离顶部或者距离底部 没有达到需求,有留白或者空出等情况
答:可以使用这三个属性进行调整,属性内会返回当前的值,调整的时候只需要根据情况返回适当增加或者减少的值 即可
//自定义整体距离顶部的位置 适用于整体距离顶部的距离
WMZPagePropStatementAndPropSetFuncStatement(copy, WMZPageParam, PageCustomFrameY, wCustomNaviBarY)
//自定义整体距离底部的位置 适用于整体距离底部的距离
WMZPagePropStatementAndPropSetFuncStatement(copy, WMZPageParam, PageCustomFrameY, wCustomTabbarY)
//自定义底部滚动视图的高度 适用于没有悬浮到需要的位置的时候
WMZPagePropStatementAndPropSetFuncStatement(copy, WMZPageParam, PageCustomFrameY, wCustomDataViewHeight)
4 在父控制住self.view addSubview 了自定义的View 看不见 需要延迟0.1秒加载
5 更新标题数据用updateTitle 更新标题和视图层用updateMenuData 都需要设置param的相关数据后调用
6 菜单栏不想悬浮要一起滑动
.wCustomDataViewHeightSet(^CGFloat(CGFloat nowY) {
return nowY + (menu的高度 默认55);
})