SkillAgentSearch skills...

WMZPageController

分页控制器,替换UIPageController方案,具备完整的生命周期,多种指示器样式,多种标题样式,可悬浮,支持ios13暗黑模式(仿优酷,爱奇艺,今日头条,简书,京东等多种标题菜单) (Pagination controller with full life cycle, multiple indicator styles, multiple title styles)

Install / Use

/learn @wwmz/WMZPageController
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

WMZPageController - 分页控制器,替换UIPageController方案,具备完整的生命周期(可传入子控制器/子视图),多种指示器样式,多种标题样式,可悬浮,功能齐全,支持底部多级联动,支持嵌套多个菜单多页面

Platform CocoaPods Compatible License

⚠️⚠️ 使用悬浮样式如果子视图有滚动视图需要实现协议 WMZPageProtocol 如果没有则不需要实现

⚠️⚠️ 1.5.0版本后改动比较大,如需稳定请指定1.4.6

⚠️⚠️

 //自定义整体距离顶部的位置(如果默认算的不准确 或者需要修改) block内会传回当前的值 可对比自行返回最终需要的
  WMZPagePropStatementAndPropSetFuncStatement(copy, WMZPageParam, PageCustomFrameY,        wCustomNaviBarY)
 //自定义整体距离底部的位置(如果默认算的不准确 或者需要修改) block内会传回当前的值 可对比自行返回最终需要的
 WMZPagePropStatementAndPropSetFuncStatement(copy, WMZPageParam, PageCustomFrameY,        wCustomTabbarY)
 //自定义底部滚动视图的高度(如果默认算的不准确 或者需要修改)可作为改变悬浮菜单栏的位置 block内会传回当前的值 可对比自行返回最终需要的
 WMZPagePropStatementAndPropSetFuncStatement(copy, WMZPageParam, PageCustomFrameY,        wCustomDataViewHeight)

演示

动画样式

| 动画样式 | 作用 (默认值) | |-----------------------|-----------------------------------------------------| | AQY样式 | AQY.gif| | PDD样式 | PDD.gif| | TT样式 | Toutiao.gif| | JD样式 | Jingdong.gif| | QQ样式 | QQ.gif| | 圆角框 | 圆角框 .gif|

标题样式

| 标题样式 | 作用 (默认值) | |-----------------------|-----------------------------------------------------| | 红点 | 红点.gif| | 富文本 |富文本.gif | | 固定宽度 |固定宽度.gif | | 图文 |带图片.gif | |固定右边 || |自定义标题样式 |自定义标题样式.gif| |自定义导航栏 |自定义导航栏.gif|

悬浮样式

| 悬浮样式 | 作用 (默认值) | |-----------------------|-----------------------------------------------------| | 悬浮导航栏透明度不变化+刷新在中间 | 悬浮导航栏透明度不变化.gif | | 悬浮导航栏透明度变化+刷新在顶部 |悬浮导航栏透明度变化+刷新在顶部.gif| | 固定底部 |固定底部.gif| | 头部放大 |头部放大.gif| | 自定义复杂嵌套悬浮UI |自定义复杂嵌套悬浮UI.gif |

嵌套

| 样式 | 作用 (默认值) | |-----------------------|-----------------------------------------------------| | wb | wb.gif | | 三层(王者营地) | 三层.gif| | 双重 |双重 .gif| | 顶掉父菜单 | 顶掉父菜单.gif

###特殊使用 | 样式 | 作用 (默认值) | |-----------------------|-----------------------------------------------------| | 作为tabbar使用 | tabbar.gif | | 淘宝首页效果 | taobao.gif| | 美团外卖商家详情效果(子控制器多级联动) |meituan.gif | | 菜单标题跟随内容滑动 | 菜单标题跟随内容滑动.gif

特性

  • 链式语法 结构优雅
  • 支持顶部悬浮
  • 支持多种指示器样式
  • 支持富文本标题
  • 支持图文混合标题
  • 支持完整的生命周期
  • 替换系统UIPageController的方案,减少内存,避免UIPageController的bug
  • 支持传入UIView/UIViewController作为子视图/子控制器
  • 菜单栏可以单独使用(详情见Demo)
  • 可独立使用WMZPageView,无需继承WMZPageController
  • 适配横竖屏

替换UIPageController是用UIScrollView替换,手势滑动从而实现完整生命周期

悬浮(子控制器/子视图实现WMZPageProtocol协议)

/// 悬浮 两者一样 下面的只是为了减少非tableview的警告
- (UIScrollView*)getMyScrollView;
/// 悬浮 数组 可滚动视图的数组 适用底部多个scrollView的情况
- (NSArray <UIScrollView*>*)getMyScrollViews;
/// 子控制器需要固定的尾部视图
- (UIView*)fixFooterView;

生命周期(子控制器/子视图实现WMZPageProtocol协议)

传入的是UIView

/// 生命周期 和VC的生命周期用法一致
- (void)pageViewWillAppear;
- (void)pageViewWillDisappear;
- (void)pageViewDidAppear;
- (void)pageViewDidDisappear;

传入的是UIView传入的是UIViewController

///系统生命周期方法
- (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内含几十种配置属性)

 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;

title传入字典对应的属性

    /// 例如
   @[
      @{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;

param的配置属性见Demo的WMZPageParam类

titleArr传入自定义model数组

 Model *model = Moded.new
 model.name = @"标题";
 self.param.wTitleArr = @[model,model,model]
 self.param.wCustomTitleContentSet(^NSString * _Nullable(id  _Nullable model, NSInt
View on GitHub
GitHub Stars664
CategoryDevelopment
Updated6d ago
Forks121

Languages

Objective-C

Security Score

100/100

Audited on Mar 27, 2026

No findings