GithubHelp home page GithubHelp logo

wwmz / wmzpagecontroller Goto Github PK

View Code? Open in Web Editor NEW
659.0 13.0 121.0 17.05 MB

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

License: MIT License

Objective-C 97.37% C 2.49% Ruby 0.07% Swift 0.08%
page pagecontroller segment menu

wmzpagecontroller's Introduction

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, NSInteger index) {
    return model.name;
 })

依赖

无任何依赖

安装

CocoaPods

  1. 将 cocoapods 更新至最新版本.
  2. 在 Podfile 中添加 pod 'WMZPageController'
  3. 执行 pod installpod update
  4. 导入 #import "WMZPageController.h"。

手动安装

  1. 下载 WMZPageController 文件夹内的所有内容。
  2. 将 WMZPageController 内的源文件添加(拖放)到你的工程。
  3. 导入 #import "WMZPageController.h"

系统要求

该库最低支持 iOS 9.0Xcode 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);
    })

下一步计划

  • 从WMZPageController抽出,无需继承也可使用 (已完成,可使用WMZPageView)
  • 适配横竖屏旋转(已完成)
  • 优化下拉缩放
  • swift版本开发

更新日记

  • 20220923 v1.5.5 修复一些bug
  • 20220819 v1.5.4 修复一些bug
  • 20220531 v1.5.3 修复 issues84 新增自定义标题文本wCustomTitleContent 可传入自定义model自行赋值
  • 20220118 v1.5.2 修复 issues77 issues78
  • 20220118 v1.5.1 支持适配横竖屏 wDeviceChange(default NO)
  • 20220117 v1.5.0 改版不需要继承WMZPageController也能使用(使用WMZPageView),同时适配旧版本
  • 20211230 v1.4.6 修复退出后台挂起后可能导致拉不下来的问题 fix#68
  • 20211208 v1.4.5 修复自定义导航栏下的偏移问题
  • 20211026 v1.4.4 修复多重嵌套手势问题 新增wMenuAddSubView 可在菜单栏增加自定义视图
  • 20211021 v1.4.2 修复多重嵌套下纵向手势滚动问题以及动态增加方法里和固定视图冲突问题
  • 20211015 v1.4.1 支持侧滑/全屏/全部页面返回 新增两种动画JDAnimal NewAQY 修复KVO崩溃问题
  • 20210814 v1.4.0 新增支持UIView传入/修复嵌套手势问题/新增下拉头视图缩放
  • 20210526 v1.3.8 修复嵌套里头视图无法滑动的问题 新增自定义手势冲突属性
  • 20210426 v1.3.7 修复没有滚动视图无法滚动的问题以及其他问题
  • 20210422 v1.3.6 主要是消除一系列的警告
  • 20210128 v1.3.5 优化
  • 20210127 v1.3.4 新增动态更新 修复右边按钮只能点击一次的问题 优化
  • 20201218 v1.3.3 新增动态增删方法 优化
  • 20201022 v1.3.2 iPhone12适配 修复bug 优化结构
  • 20201009 v1.2.7 修复bug
  • 20200920 v1.2.6 淘宝demo优化 新增自定义顶部距离 自定义整体高度 自定义底部距离
  • 20200904 v1.2.5 淘宝demo增加圆角示范,优化加入的控制器,传入字体增加UIFont对象
  • 20200820 v1.2.4 修复bug/新增swift使用示范
  • 20200801 v1.2.1 修复bug
  • 20200726 v1.2.0 新增淘宝分页效果/美团商家分页效果
  • 20200605 v1.1.9 新增自定义红点和特殊样式1
  • 20200511 v1.1.8 修复bug
  • 20200424 v1.1.7 修复细节问题
  • 20200409 v1.1.6 修复偏移问题
  • 20200328 v1.1.5 修复设置导航栏translant和tabbar设置translant的布局问题; 新增wFixFirst属性 固定在所有控制器的底部的尾视图
  • 20200202 v1.1.4 修复bug
  • 20200107 v1.1.3 修复bug 新增可固定底部
  • 20191213 v1.1.0 建议更新 新增可添加tableviewCell功能
  • 20191213 v1.0.5 增加demo说明 新增自定义菜单接口
  • 20191209 v1.0.4 修复bug
  • 20191207 v1.0.3 修复悬浮问题
  • 20191104 v1.0.1 修复一些问题

wmzpagecontroller's People

Contributors

davidlii avatar wwmz avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

wmzpagecontroller's Issues

设置wMenuTitleSelectUIFontSet无效

想给选中状态和未选中状态设置不同的字体,同时设置了wMenuTitleUIFontSet和wMenuTitleSelectUIFontSet,生效的只有wMenuTitleUIFontSet

如何更新右边固定标题?

.wMenuFixRightDataSet(@{@"name":@"金币",@"image":@"f_arrow_upbai"})
.wEventFixedClickSet(^(id anyID, NSInteger index) {
WMZPageNaviBtn *btn = anyID;
[btn setTitle:@"更新" forState:UIControlStateNormal];
})

是这样更新右边固定标题的吗?这样写页面会变形

刷新的时候可以左右滚动

你的demo刷新的时候不会左右滚动,但是相同代码写入我自己的工程,刷新的时候可以左右滚动,请问有什么特别的设置吗?

子控制器的生命周期函数调用有点小瑕疵

和系统实现的容器控制器管理的子控制器生命周期函数调用时机不是很一致
这是使用WMZPageController时轻微拖动然后取消拖动时子控制器的生命周期函数调用顺序
`2020-01-26 21:15:18.164039+0800 Example[68459:663714] 0x7f8a12436a90 -[ListViewController viewWillAppear:]

2020-01-26 21:15:18.164300+0800 Example[68459:663714] 0x7f8a124713e0 -[ListViewController viewWillDisappear:]

2020-01-26 21:15:18.164746+0800 Example[68459:663714] 0x7f8a12436a90 -[ListViewController viewDidAppear:]

2020-01-26 21:15:18.165165+0800 Example[68459:663714] 0x7f8a124713e0 -[ListViewController viewDidDisappear:]`

这是我用系统UIPageViewController按照如上操作其子控制器的生命周期调用情况
`2020-01-26 21:23:04.310820+0800 YunES[68568:677963] -[YJFTableViewController viewWillAppear:]

2020-01-26 21:23:04.310979+0800 YunES[68568:677963] -[YJFNomalViewController viewWillDisappear:]

2020-01-26 21:23:10.122912+0800 YunES[68568:677963] -[YJFNomalViewController viewWillAppear:]

2020-01-26 21:23:10.123155+0800 YunES[68568:677963] -[YJFNomalViewController viewDidAppear:]

2020-01-26 21:23:10.123380+0800 YunES[68568:677963] -[YJFTableViewController viewWillDisappear:]

2020-01-26 21:23:10.123608+0800 YunES[68568:677963] -[YJFTableViewController viewDidDisappear:]
`

selectMenuWithIndex不能立即生效?

您好大佬,麻烦问下,默认选中某个index页面,selectMenuWithIndex不能立即生效,我加了个延迟0.1秒才会选中这个页面,请问是什么原因呀?

怎样与swift混编?

好轮子
但是怎样与swift混编?
.wTitleArrSet(data)一直报 Argument passed to call that takes no arguments错误

DropMenu和pageController运行起来直接crash

DropMenu和pageController的代码运行起来后就挂了,报的如下exception!
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'section header height must not be negative - provided height for section 3 is -0.010000'

菜单滚动到顶部,无法悬停,

  • (void)setupUI {
    __weak MineViewController *weakSelf = self;
    //默认标题透明度0
    [self.navigationController.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor colorWithRed:10/255.0 green:10/255.0 blue:20/255.0 alpha:0]}];
    WMZPageParam *param = PageParam()
    .wTitleArrSet(@[@"分享",@"赞过",@"评论"])
    // .wMenuWidthSet(kWidth/3)
    .wControllersSet(@[[WaterCollectionController new],[WaterCollectionController new],[WaterCollectionController new]])
    //悬浮开启
    .wTopSuspensionSet(YES)
    //等分
    .wMenuTitleWidthSet(PageVCWidth/3)
    //头视图y坐标从0开始
    .wFromNaviSet(NO)
    //导航栏透明度变化
    .wNaviAlphaSet(YES)
    //顶部可下拉
    .wBouncesSet(YES)
    //头部
    .wMenuHeadViewSet(^UIView *{
    MineHeader *back = [MineHeader new];
    back.frame = CGRectMake(0, 0, PageVCWidth, 470+PageVCStatusBarHeight);

      return back;
    

    })
    //导航栏标题透明度变化
    .wEventChildVCDidSrollSet(^(UIViewController *pageVC, CGPoint oldPoint, CGPoint newPonit, UIScrollView *currentScrollView) {

        __strong MineViewController *strongSelf = weakSelf;
       [strongSelf.navigationController.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor colorWithRed:10/255.0 green:10/255.0 blue:20/255.0 alpha:newPonit.y/(500+470-2*PageVCNavBarHeight)]}];
    

    });
    //实现tableview的协议
    self.downSc.dataSource = self;
    self.param = param;
    //延时0.1秒
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
    // 下拉刷新
    self.downSc.mj_header= [MJRefreshNormalHeader headerWithRefreshingBlock:^{
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
    [weakSelf.downSc.mj_header endRefreshing];
    });
    }];

    });
    }
    我这样配置,菜单可以悬浮,但是没办法悬停,菜单滚动到顶部,无法悬停,我滑动下面的collectionView,菜单立马跟着下来了。。但是你的demo又没有问题,我导入的是1.1.8版本的库,我对比了下demo,属性好像没有差别。。不知道还需要配置什么。。求大佬指点一二

显示导航栏+中间刷新

显示导航栏+中间刷新的控制器数组放再嵌套一个WMZPageController 会有滑动冲突
//控制器数组 .wViewControllerSet(^UIViewController *(NSInteger index) { UseVC *vc = [UseVC new]; vc.index = @0; return vc; })

细节还需完善

1、title的左侧间距无法调整
2、title栏目view,无法调整左右边距,只能设置宽度
3、右侧固定的按钮无法自定义,建议是右侧暴露出一个view,让使用者自定义view,且可设置size

正好这几个都是项目中需要的....

各个板块中放UITableView的问题

1.在导航栏透明度变化+头部刷新这个demo中,如果我在各个板块控制器内添加UITableView,会出现UITableView下拉的时候,头部就会立马下拉刷新的问题。应该是手势处理的问题。
2.在导航栏透明度变化+头部刷新这个demo中,无法添加加载更多。

感谢大佬

首先感谢作者提供的优秀的三方,希望能继续更新下去。这里我遇到这个问题:

我将param设置成
.wMenuAnimalSet(PageTitleMenuAiQY)///爱奇艺样式(依恋)

然后动态的添加[self addMenuTitleWithObject:[WMZPageTitleDataModel initWithIndex:0 controller:AddVC title:@"增加的标题"]]

发现指示器的位置滑动到了第0个,并没有在当前的索引中。

请问如何在右侧add自定义的view

类似这种右侧有一个自定的view的需求。

直接在wCustomMenuViewSet(^(UIView *bgView){}回调里这样写:

XKCustomView * view = [XKCustomView new];
[bgView addSubView:view];

这样恐怕不行吧,会重复add

crash when “newVC == nil”

这个方法取值为空未做兼容,导致闪退
- (UIViewController*)getVCWithIndex:(NSInteger)index{
    if (index < 0|| index >= self.param.wControllers.count) {
        return nil;
    }
    if ([[self findBelongViewControllerForView:self].cache objectForKey:@(index)]) {
        return [[self findBelongViewControllerForView:self].cache objectForKey:@(index)];
    }
    return self.param.wControllers[index];
}
   UIViewController *newVC = [self getVCWithIndex:index];
   [newVC beginAppearanceTransition:YES animated:YES];
   [self addChildVC:index VC:newVC];
- (void)addChildVC:(NSInteger)index VC:(UIViewController*)newVC{
    if (![[self findBelongViewControllerForView:self].childViewControllers containsObject:newVC]) {
        [[self findBelongViewControllerForView:self] addChildViewController:newVC];
        CGRect frame = CGRectMake(index * self.dataView.frame.size.width,0,self.dataView.frame.size.width,
                                  self.dataView.frame.size.height);
        newVC.view.frame = frame;
        [self.dataView addSubview:newVC.view];
        [newVC didMoveToParentViewController:[self findBelongViewControllerForView:self]];
        [[self findBelongViewControllerForView:self].cache setObject:newVC forKey:@(index)];
    }
}

代码规范的问题

WMZPageConfig文件宏定义前缀问题,枚举值的定义,目前都缺少。
WMZPageController
  1. 生命周期方法,是否需要拆分.如:viewWillAppear逻辑编写是否过多。
  2. if-else方法是否存在太多。如:“UI”【大方法拆分】
WMZPagePropStatementAndPropSetFuncStatement是否可取,个人觉得会影响代码可读性。

打开相册, 照片顶部被导航栏遮盖

UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
imagePicker.delegate = self;
imagePicker.allowsEditing = YES;

imagePicker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
[self presentViewController:imagePicker animated:YES completion:nil];

添加自定义view无法带到最顶层

1.WMZPageController的子控制器作为UITableBarController的子控制器
2.WMZPageController的view添加一个自定义view,并[self.view bringSubviewToFront:self.自定义view];
3.window的根控制器由其他控制器切换为上面的UITableBarController控制器的时候并不能展示出上面的自定义view
4.版本号1.3.7

隐藏导航栏后,直接把菜单栏加到导航栏的位置,页面下部分有留白,大概一个导航栏的高度,具体代码在这里

NSArray *data=@[@"活动行程",@"申请记录"];

NSMutableArray *vcArr=[NSMutableArray new];
[vcArr addObject:[[MJGoTableViewController alloc]init]];
[vcArr addObject:[[MJGoApplyTableViewController alloc]init]];

WMZPageParam *param = PageParam()
.wTitleArrSet(data)
.wMenuTitleOffsetSet(16.5)
.wMenuTitleSelectColorSet(UIColorWhite)
.wMenuTitleColorSet(UIColorWithHexString(@"#FFFFFF"))
.wMenuAnimalSet(3)
.wMenuIndicatorWidthSet(28)
.wMenuCellMarginSet(16.5)
.wMenuBgColorSet(UIColorWithHexString(@"#4B4B4B"))
.wMenuCellMarginYSet(20)
.wFromNaviSet(NO)
.wControllersSet(vcArr);
self.param = param;

self.rectArr=[NSMutableArray new];
CGRect frame=CGRectMake(SCREEN_WIDTH*vcArr.count, 0, SCREEN_WIDTH, SCREEN_HEIGHT-TabBarHeight);
[self.rectArr addObject:[NSValue valueWithCGRect:frame]];

美团商家详情两层联调

滑动右边的tableview,多滑动一些到,比如到标题4.置顶之后,滑动左边的tableview列表,将整个页面滑动到初始位置,此时滑动右侧的tableview,向下滑动没有问题,向上滑动的话,右侧的tableview会直接置顶,滚动到标题0

建议设置按钮图片时判断是否时网络图

175行:CGSize size = btn.maxSize;
//设置图片
id image = [self getTitleData:self.param.wTitleArr[i] key:@"image"];
id selectImage = [self getTitleData:self.param.wTitleArr[i] key:@"selectImage"];
if (image) {
[btn sd_setImageWithURL:[NSURL URLWithString:image] forState:UIControlStateNormal];

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.