Giter Club home page Giter Club logo

ynpageviewcontroller's Introduction

image

集合了多种样式的嵌套页面布局(滑动库):

本库是对YNPageScrollViewController 进行重构,优化代码,重写实现原理。其优点如下:

优点
易于集成,多种样式以供选择,特斯拉(悬浮)布局等
控制器生命周期完好无损、懒加载控制器
高性能: 用双缓存机制让界面只存在一个控制器
支持UISollView、UITableView、UICollectionView、
支持列表拓展tableFooterView、tableHeaderView、
支持CollectionView的瀑布流、FlowLayout修改的布局
支持头部拉伸放大特效、还有其他部分拓展的API

Demo效果图

image

Requirements 要求

  • iOS 8+
  • Xcode 8+

Installation 安装

1.手动安装:

  • 下载DEMO后,将子文件夹Libs/YNPageViewController拖入到项目中, 导入头文件YNPageViewController.h开始使用.

2.CocoaPods安装:

  • 一、可以直接在项目Podfile 文件中 pod 'YNPageViewController'

  • 二、先pod search YNPageViewController 搜索一下

  • 如果发现pod search YNPageViewController 不是最新版本,在终端执行pod setup命令更新本地spec镜像缓存,重新搜索

  • 搜索不到则执行1.pod repo update 2.rm ~/Library/Caches/CocoaPods/search_index.json

  • 在Podfile文件中用 pod 'YNPageViewController'

使用方法

1.新建控制器继承YNPageViewController 实现 YNPageViewControllerDataSource, YNPageViewControllerDelegate, delegate可选实现
2.创建YNPageConfigration类进行配置信息
3.创建实例方法
+ (instancetype)pageViewControllerWithControllers:(NSArray *)controllers
                                           titles:(NSArray *)titles
                                           config:(YNPageConfigration *)config;
4.具体使用方法可以查看Demos教程。

使用悬浮样式需要注意:

• SuspensionTop || SuspensionCenter 需要填充cell占位高度,不支持 [mj_header beginRefresing]

• headerView高度较小建议使用 SuspensionTop,高度比较大建议使用 SuspensionCenter

• SuspensionTopPause不需要填充占位cell高度,只是头部上拉时停顿。可实现QQ联系人效果。

CocoaPods更新日志

• 2018-12-13 (tag 0.2.5): 添加数据源获取列表高度,默认是控制器高度 

• 2018-07-27 (tag 0.1.3 ~ 0.1.7): 添加reloadData方法、自定义缓存Key可配置相同title、优化QQ联系人悬浮布局

• 2018-07-27 (tag 0.1.3): 新增置顶API, 插入、删除、调整顺序控制器的API

• 2018-07-23 (tag 0.1.2): 新增可以添加 ScrollMenu ButtonItem image

• 2018-07-14 (tag 0.1.0): 修复头部视图可侧滑返回

• 2018-07-14 (tag 0.0.9): 新增SuspensionTopPause样式和示例 (QQ联系人Tab布局)

• 2018-07-12 (tag 0.0.7): 解决 SectionHeader 挡住 ScrollMenu 的问题

• 2018-07-09 (tag 0.0.5): 新增悬浮Menu 偏移量

• 2018-07-03 (tag 0.0.3): 新增刷新悬浮头部视图高度API
  
• 2018-06-29 (tag 0.0.2):
  1.添加设置菜单栏选择字体大小属性
  2.修复拉倒底部点击菜单栏下掉问题
  
• 2018-06-27 (tag 0.0.1): 发布Pods v0.0.1

联系方式:

YN-iOS-交流群群二维码

许可证

YNPageViewController 使用 MIT 许可证,详情见 LICENSE 文件。

ynpageviewcontroller's People

Contributors

sunisland avatar yongyuandouneng 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

ynpageviewcontroller's Issues

刷新问题头部问题

setupHeaderBgView headerBgView每次会alloc下
建议改成懒加载

  • (YNPageHeaderScrollView *)headerBgView{
    if (!_headerBgView) {
    _headerBgView = [[YNPageHeaderScrollView alloc]init];
    }
    return _headerBgView;
    [}]()

点击菜单选项的事件怎么监听?

我把所有的代理都试了一遍,结果都是先进入子控制器的viewload,然后才会进入代理。这样我就无法根据不同的菜单去显示不同的内容了。

页面返回的时候内存不会释放

+(instancetype)informationViewController {

YNPageConfigration *configration = [YNPageConfigration defaultConfig];
configration.pageStyle = YNPageStyleTop;
configration.headerViewCouldScale = YES;
configration.headerViewScaleMode = YNPageHeaderViewScaleModeTop;
configration.showTabbar = NO;
configration.showNavigation = YES;
configration.scrollMenu = YES;
configration.aligmentModeCenter = NO;
configration.lineWidthEqualFontWidth = NO;
configration.showBottomLine = YES;
configration.lineColor = COLOR_NAV_BG;
configration.converColor = COLOR_NAV_BG;
configration.selectedItemColor = [UIColor blackColor];
configration.normalItemColor = COLOR_TEXT_6;
configration.bottomLineBgColor = COLOR_SEPARATOR;
configration.bottomLineHeight = 1;
configration.itemFont = [UIFont systemFontOfSize:16];
configration.selectedItemFont = [UIFont systemFontOfSize:16];

CCMInformationViewController *vc = [CCMInformationViewController pageViewControllerWithControllers:[self getArrayVCs]
                               titles:[self getArrayTitles]
                               config:configration];
vc.dataSource = vc;
vc.delegate = vc;
return vc;

}

这样初始化,返回的时候内存没有释放

如何仅仅修改头部高度

头部是个广告页,每次页面出现都会重新调用接口刷新banner,如何仅仅改变头部广告页的高度?

YNPageStyleSuspensionCenter

YNPageStyleSuspensionCenter 第一次, vc.pageIndex = 0;,进去就到标题,头部不能显示,点击1的时候,正常了。

初始化问题

有没有办法 用的时候做成[ [YNPageViewController alloc]init]
实际 init 的配置信息放在内部控制器中,这全都暴露在外部调用该vc的控制器里了

视图层级问题

当移除这两个视图(self.headerBgView&self.scrollMenuView), 直接add到self.view时, 视图层级会出现点问题(原本在self.view最上层的视图, 会被刚add上去的这两货挡住). 是否可以修改成如下代码:

 [self.view insertSubview:self.headerBgView aboveSubview:self.pageScrollView];
 [self.view insertSubview:self.scrollMenuView aboveSubview:self.headerBgView];

更新标题 - [self updateMenuItemTitle:result index:index] 导致页面空白

//刷新缓存title
  [self.cacheKeyArray replaceObjectAtIndex:index withObject:result];
  //titlesM 要一起更新, key = titlesM[index], value = VC,才不会出错!!
  [self.titlesM replaceObjectAtIndex:index withObject:result];    
  [self updateMenuItemTitle:result index:index];
- (NSString *)pageViewController:(YNPageViewController *)pageViewController customCacheKeyForIndex:(NSInteger)index {
    return self.cacheKeyArray[index];
}

UIViewController *cacheVC = self.cacheDictM[[self getKeyWithTitle:oldTitle]];
第一次会导致取出的控制器是nil

- self.cacheDictM 不会更新所有数据? 本来有三条数据,经过上面操作,发现self.cacheDictM中只有一条旧数据 {“oldTitle”:"vc"}

导致 newTitle 取不到 对应的控制器 

请问如何进行属性传值呢?

YNSuspendTopBaseTableViewVC *vc_1 = [[YNSuspendTopBaseTableViewVC alloc] init];
vc_1.cellTitle = @"鞋子";
请问如何将"鞋子"更换成当前页面的属性.之前是self来调用,现在无法使用了呀!

问题:如果数据都是从网络获取的怎么处理

不好用的地方:
1.禁用了 init 感觉不太好。

  • (instancetype)new UNAVAILABLE_ATTRIBUTE;
  • (instancetype)init UNAVAILABLE_ATTRIBUTE;

2.对于这样的需求无能为力:部分数据是从网络(轮播图的数组+轮播图下面的标题文字数组都是从网络获取的)这种情况就不好处理。正常的逻辑先创建控制器。在控制器的viewDidLoad方法中进行网络请求,请求到数据之后刷新数据。(先有VC再有数据) 。但是提供的接口是:先有数据才能创建VC。

  • (instancetype)pageViewControllerWithControllers:(NSArray *)controllers
    titles:(NSArray *)titles
    config:(YNPageConfigration *)config;
  1. 总体感觉还是挺👍的。

Support Swift?

can you write a swift Version? It is very good ,Best wish

一点建议

目前不支持刷新头部frame。
遇到这种需求,下拉刷新在中间,初始化的时候就必须要设置头部view。而头部内容是需要请求后才知道frame的,这时没办法更新头部的frame。

需求

中间的导航可以自定义其他View吗?

建议子页面协议化,防止篡改UIGestureRecognizerDelegate导致的问题

public func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    
    if let vc = self.jw.viewController() {
        
        if vc is FineGoodsSectionItemBaseVCDelegate {  // 只有当子页面实现这个协议,才可能返回true
            
            let canGes = gestureRecognizer.isKind(of: UIPanGestureRecognizer.self)
                && otherGestureRecognizer.isKind(of: UIPanGestureRecognizer.self)
            return canGes
            
        }
    }
    
    return false
}

闪退崩溃了

在含有“功能操作”的界面,选择功能操作下拉列表的reload选项,再点击tabBar选项就会出现崩溃???

largetitle

使用时, 如果页面设置largetitle, 当上下滑动时, largetitle不能得到响应,

下拉刷新样式有问题

demo中悬浮样式-下拉刷新在顶部(row2),下拉刷新动画还未消失时,左右滑动切换tab,下拉刷新样式有问题,麻烦大神看下吧,谢谢~

集成后悬停问题

悬停后滑动到下面tableview,再次下滑,滑动头部不出来,只能滑动tableview,从标题栏那里下滑才能把头部拉出来,需要怎么配置?

iOS 10 scrollMenu 中buttons错位

最初现象是:在iOS 10 中,点击状态栏时 scrollMenu 中的 button 会向下偏移。然后发现button 的父视图 scrollView 的 contentSize 有问题,导致buttons 可以上下滑动。大佬有空看下!

菜单悬停

在源代码里面想修改菜单悬停,没有成功,大佬可否指教一二

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.