diff --git a/XXPageController.podspec b/XXPageController.podspec index 2a78356..5a9a81a 100644 --- a/XXPageController.podspec +++ b/XXPageController.podspec @@ -16,7 +16,7 @@ Pod::Spec.new do |spec| # spec.name = "XXPageController" - spec.version = "0.0.5" + spec.version = "0.0.7" spec.summary = "分页加载控制器." spec.description = <<-DESC diff --git a/XXPageController/ExampleController/PageCell1Controller.m b/XXPageController/ExampleController/PageCell1Controller.m index 595997d..621a2ef 100755 --- a/XXPageController/ExampleController/PageCell1Controller.m +++ b/XXPageController/ExampleController/PageCell1Controller.m @@ -16,22 +16,24 @@ @interface PageCell1Controller () @end //#define kNavAndStatus_Height ([[UIApplication sharedApplication] statusBarFrame].size.height + 44) - +#define isIPhoneX (CGSizeEqualToSize(CGSizeMake(375.f, 812.f), [UIScreen mainScreen].bounds.size) || CGSizeEqualToSize(CGSizeMake(812.f, 375.f), [UIScreen mainScreen].bounds.size)) //是否是iphoneX +//底部安全高度 +#define kBottom_Safe_Height (isIPhoneX ? 34 : 0) @implementation PageCell1Controller -(void)viewDidLoad{ [super viewDidLoad]; self.view.backgroundColor = [UIColor yellowColor]; -// [self addTableView]; + [self addTableView]; } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; //当调用_childController.view.frame时,触发ChildViewController的-(void)viewDidLoad方法执行,但是这个时候_childController.view还没被添加在父视图上呢,所以坐标是被设置了,但是还没完成设置,也就是没有最终落地到实处。所以tableView去self.view.bounds还是取得默认的试图控制器的宽和高,默认的宽和高是屏幕的宽和高,所以导致了上述问题。 //在 viewWillAppear/viewWillLayoutSubviews/viewDidLayoutSubviews 中 subview 的 frame 是准确的 - if (!_tableView) { - [self addTableView]; - } +// if (!_tableView) { +// [self addTableView]; +// } } @@ -39,18 +41,15 @@ - (void)viewWillLayoutSubviews { [super viewWillLayoutSubviews]; // _tableView.frame = self.view.bounds; // _indicatorView.center = _tableView.center; - } --(UIView *)addHeaderView{ - UIImageView *header = [[UIImageView alloc] initWithFrame:(CGRect){{0, 0}, {self.view.bounds.size.width, 200}}]; - [header setImage:[UIImage imageNamed:@"bg"]]; - header.contentMode = UIViewContentModeScaleAspectFill; - header.clipsToBounds = YES; - - return header; +- (void)viewDidLayoutSubviews { + [super viewDidLayoutSubviews]; + _tableView.frame = self.view.frame; + _indicatorView.center = _tableView.center; } + -(void)addTableView{ CGRect frame = self.view.bounds; //frame.size.height = frame.size.height - kNavAndStatus_Height; @@ -58,13 +57,13 @@ -(void)addTableView{ _tableView.delegate = self; _tableView.dataSource = self; -// _tableView.tableHeaderView = [self addHeaderView]; _tableView.tableFooterView = [[UIView alloc] init]; [self.view addSubview:_tableView]; _tableView.hidden = YES; - + _indicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; _indicatorView.hidesWhenStopped = YES; + _indicatorView.color = [UIColor redColor]; _indicatorView.center = _tableView.center; [self.view addSubview:_indicatorView]; @@ -82,7 +81,7 @@ -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ } -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ - return 20; + return 12; } -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ diff --git a/XXPageController/ExampleController/Parent4Controller.m b/XXPageController/ExampleController/Parent4Controller.m index ca3d6cd..019057c 100644 --- a/XXPageController/ExampleController/Parent4Controller.m +++ b/XXPageController/ExampleController/Parent4Controller.m @@ -14,15 +14,17 @@ @interface Parent4Controller () @end #define kScreenWidth [[UIScreen mainScreen] bounds].size.width +#define kScreenHeight [[UIScreen mainScreen] bounds].size.height +#define kNavAndStatus_Height ([[UIApplication sharedApplication] statusBarFrame].size.height + 44) @implementation Parent4Controller - (void)viewDidLoad { [super viewDidLoad]; - self.view.backgroundColor = [UIColor whiteColor]; + self.view.backgroundColor = [UIColor redColor]; self.title = NSStringFromClass(self.class); - UIImageView *header = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 100)]; + UIImageView *header = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 150)]; [header setImage:[UIImage imageNamed:@"bg"]]; header.contentMode = UIViewContentModeScaleAspectFill; header.clipsToBounds = YES; @@ -36,22 +38,35 @@ - (void)viewDidLoad { }]; XXPageMenuController *pageMenuController = [[XXPageMenuController alloc] initWithTitles:titles controllers:controllers onNavigationBar:NO]; pageMenuController.lineColor = [UIColor orangeColor]; - pageMenuController.titleFont = [UIFont systemFontOfSize:14 weight:UIFontWeightLight]; + pageMenuController.titleFont = [UIFont systemFontOfSize:13]; pageMenuController.titleColor = [UIColor colorWithWhite:0.2 alpha:1]; pageMenuController.titleSelectedColor = [UIColor blackColor]; - pageMenuController.pageBarBgColor = [UIColor whiteColor]; + pageMenuController.pageBarBgColor = [UIColor greenColor]; pageMenuController.pageBarHeight = 44; pageMenuController.lineWidthType = LineWidthTypeStaticShort; //pageMenuController.lineScrollType = arc4random() % 2 + 1; //1,2随机 LineScrollTypeFinishedAnimation 或者 LineScrollTypeFinishedLinear; pageMenuController.defaultIndex = 1; - pageMenuController.originY = 100; + pageMenuController.originY = 50; //因为这里是将pageMenuController添加到ParentController(self类)上的,所以要为pageMenuController设置父视图控制器 - [pageMenuController setSuperViewController:self]; - - pageMenuController.didLayoutSubviewsBlock = ^(UIView *pageMenuControllerView, UIScrollView *scrollViewPage, UICollectionView *collectionMain) { - //do something - }; +// [pageMenuController setSuperViewController:self]; + [self addChildViewController:pageMenuController]; + [self.view addSubview:pageMenuController.view]; +// dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(6 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ +// +// CGFloat tableViewH = kScreenHeight - kNavAndStatus_Height - pageMenuController.pageBarHeight - 150; +// //pageMenuController.view.frame = CGRectMake(0, pageMenuController.pageBarHeight + 150, kScreenWidth, tableViewH); +// for (PageCell1Controller *vc in controllers) { +// vc.tableViewH = tableViewH; +// [vc reloadDataAndUI]; +// } +// }); + +} + +- (void)viewDidAppear:(BOOL)animated { + [super viewDidAppear:animated]; + } - (void)didReceiveMemoryWarning { diff --git a/XXPageController/XXPageMenuController/XXPageMenuController.h b/XXPageController/XXPageMenuController/XXPageMenuController.h index 56f5ef1..93a1c91 100755 --- a/XXPageController/XXPageMenuController/XXPageMenuController.h +++ b/XXPageController/XXPageMenuController/XXPageMenuController.h @@ -109,7 +109,7 @@ typedef NS_ENUM(NSInteger, PageTitleColorChangeType) { /** 默认选择的 index 位置 ,默认值为0*/ @property (nonatomic,assign) NSInteger defaultIndex; -/** 分页控制器View视图的 Y 轴方向 自由设置起始位置(适用于分页条不在导航条上的情况) */ +/** 分页控制器View视图的 Y 轴方向 设置初始位置(适用于分页条不在导航条上的情况) , 动态位置由于UICollectionViewCell 的复用存在不可知 bug, 暂不实现*/ @property (nonatomic, assign) CGFloat originY; /** diff --git a/XXPageController/XXPageMenuController/XXPageMenuController.m b/XXPageController/XXPageMenuController/XXPageMenuController.m index 28ad410..a100e3b 100755 --- a/XXPageController/XXPageMenuController/XXPageMenuController.m +++ b/XXPageController/XXPageMenuController/XXPageMenuController.m @@ -16,7 +16,7 @@ @interface PopEnabeldCollectionView : UICollectionView @end @implementation PopEnabeldCollectionView - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { - //解决横向滚动的scrollView和系统pop手势返回冲突 + //处理横向滚动的scrollView和系统pop手势返回冲突 if ([otherGestureRecognizer.view isKindOfClass:NSClassFromString(@"UILayoutContainerView")] && otherGestureRecognizer.state == UIGestureRecognizerStateBegan && self.contentOffset.x == 0) return YES; return NO; } @@ -41,16 +41,11 @@ - (instancetype)initWithFrame:(CGRect)frame { _titleLabel = [[UILabel alloc] initWithFrame:self.bounds]; _titleLabel.textAlignment = NSTextAlignmentCenter; _titleLabel.lineBreakMode = NSLineBreakByCharWrapping; -// _titleLabel.backgroundColor = [UIColor greenColor]; _titleLabel.userInteractionEnabled = YES; UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(titleClick)]; [_titleLabel addGestureRecognizer:tap]; [self addSubview:_titleLabel]; - - - - _titleBtn = [[UIButton alloc] initWithFrame:self.bounds]; _titleBtn.contentMode = UIViewContentModeCenter; _titleBtn.titleEdgeInsets = UIEdgeInsetsMake(0, 3, 0, 0); @@ -92,7 +87,7 @@ @interface XXPageMenuController ()*titles; @property (nonatomic, strong) NSArray *controllersClass; @property (nonatomic, strong) NSArray *controllers; @property (nonatomic, strong) NSArray *icons; @@ -156,8 +151,21 @@ - (void)setSuperViewController:(UIViewController *)superVc { [superVc.view addSubview:self.view]; } +- (void)viewDidLoad { + [super viewDidLoad]; + self.view.backgroundColor = [UIColor whiteColor]; + [self configProperties]; + [self addScrollViewPage]; + [self addCollectionMain]; + [self addPageBottomLine]; + [self addObserver:self forKeyPath:@"selectedIndex" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil]; +} + - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; + if (self.parentViewController ) { + self.parentViewController.edgesForExtendedLayout = UIRectEdgeNone; + } //1. 更新下划线的frame [self updateLineFrameWithIndex:self.selectedIndex]; //2. 更新collection page的显示index 位置 @@ -174,30 +182,13 @@ - (void)viewDidAppear:(BOOL)animated { } } -- (void)loadView { - [super loadView]; - [self configProperties]; - [self addScrollViewPage]; - [self addCollectionMain]; - [self addPageBottomLine]; -} - -- (void)viewDidLoad { - [super viewDidLoad]; - self.view.backgroundColor = [UIColor whiteColor]; - [self addObserver:self forKeyPath:@"selectedIndex" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil]; -} - - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { if ([keyPath isEqualToString:@"selectedIndex"]) { NSInteger oldIndex = [[change objectForKey:NSKeyValueChangeOldKey] integerValue]; NSInteger newIndex = [[change objectForKey:NSKeyValueChangeNewKey] integerValue]; - XXPageItemCell *oldCell = _pageCells[oldIndex]; - XXPageItemCell *newCell = _pageCells[newIndex]; - if (newIndex != oldIndex) { - [self reloadCollectionPageCell:oldCell index:oldIndex selected:NO]; - [self reloadCollectionPageCell:newCell index:newIndex selected:YES]; + [self reloadCollectionPageCell:_pageCells[oldIndex] index:oldIndex selected:NO]; + [self reloadCollectionPageCell:_pageCells[newIndex] index:newIndex selected:YES]; } } } @@ -243,7 +234,7 @@ - (void)configProperties { if (self.parentViewController ) { self.parentViewController.edgesForExtendedLayout = UIRectEdgeNone; } - if (_originY) { + if (_originY != 0) { CGRect frame = self.view.frame; frame.origin.y += _originY; frame.size.height -= _originY; @@ -324,8 +315,11 @@ - (void)addScrollViewPage { _pageCells = [NSMutableArray array]; __block CGFloat currentX = 0; - [_pageCellWs enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { - CGFloat pageCellW = [obj floatValue]; + [self.titles enumerateObjectsUsingBlock:^(NSString * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + CGFloat pageCellW = _pageCellW; + if (_pageCellWidthType == PageCellWidthTypeByTitleLength) { + pageCellW = [self.pageCellWs[idx] floatValue]; + } CGRect frame = CGRectMake(currentX, 0, pageCellW, _pageBarHeight); currentX += pageCellW; XXPageItemCell *pageItemCell = [[XXPageItemCell alloc] initWithFrame:frame];