比较简单的一款导航切换。
当然其他大神的都很好,只是自己写可以随意改,被各种bug烦死了。
demo和使用方法在底部。
//代码解读 ///最开始是将标签按钮放在了navigationBar上,这样造成一个问题,标签切换页面不是一级,标签navigation返回时隐藏/remove标签不会跟随手指pop 页面隐藏,不太美观,所以解读层级关系图,返回按钮既然也在nav上,说明可以做到跟随隐藏

#!!!该方法废弃(视图会出现重叠)
//找到这个contentView添加标签view,完美解决跟随问题
//NNTitleSlideViewController.m
-(void)addTopView{
for (UIView *view in self.navigationController.navigationBar.subviews) {
if ([NSStringFromClass([view class]) containsString:@"ContentView"]) {
NSLog(@"%@",view);
[view addSubview:self.navView];
}
}
//其他代码。略过看demo
}
###经过多次观察视图之后突然想起,既然返回按钮在push页面的时候可以做到跟随显示隐藏,那把标签放在左右barbuttonitem上不就好了。如果需要居中就放在titleView上,只是如果在二级页面需要返回按钮是,居中会偏移,这时加上rightbarbuttonitem占位就ok了。这样就不需要考虑视图出现消失,会重叠,不跟随navbar,此方法只适用于简单的导航栏标签切换。
### `如果各位大佬有更好的方法请告诉我,跪谢👻`
if (self.style == NNTitleSlideStyleCenter) {
UIButton * backBtn = [[UIButton alloc]initWithFrame:CGRectMake(0, 0, 40, 20)];
[backBtn setTitle:@"返回" forState:UIControlStateNormal];
[backBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
UIBarButtonItem * item = [[UIBarButtonItem alloc]initWithCustomView:backBtn];
self.navigationItem.leftBarButtonItem = item;
self.navigationItem.titleView = self.navView;
//占位,使titleview居中
UIButton * rightBtn = [[UIButton alloc]initWithFrame:CGRectMake(0, 0, 40, 20)];
[rightBtn setTitle:@"返回" forState:UIControlStateNormal];
[rightBtn setTitleColor:[UIColor clearColor] forState:UIControlStateNormal];
UIBarButtonItem * items = [[UIBarButtonItem alloc]initWithCustomView:rightBtn];
self.navigationItem.rightBarButtonItem = items;
}else{
UIBarButtonItem * item = [[UIBarButtonItem alloc]initWithCustomView:self.navView];
self.navigationItem.leftBarButtonItem = item;
}
使用
### navigationbar不可以隐藏!!!!!
//继承 NNTitleSlideViewController(不需要import)
- (void)viewDidLoad {
[super viewDidLoad];
self.dataSource = self;//必要(记得引用delegate和DataSource)
self.delegate = self;//可选
//其他属性设置参考.h文件
self.currentIndex = 1;
self.btnWidth = 50;
self.slideHeight = 4;
self.slideColor = TextThemeColor;
self.style = NNTitleSlideStyleLeft;//必设置
//使带有scrollview的页面拥有侧滑手势,否则会引起手势冲突
[self.scrollView.panGestureRecognizer requireGestureRecognizerToFail:self.navigationController.interactivePopGestureRecognizer];
}
-(NSArray*)childViewControllersWithNavVC:(NNTitleSlideViewController *)slideVC{
return @[];//viewController数组,不想写,自己看demo吧
}
-(NSArray*)titlesWithNavVC:(NNTitleSlideViewController *)slideVC{
return @[@"我是",@"小",@"仙女"];
}
###不需要侧滑可以不加
//使带有scrollview的页面拥有侧滑手势,否则会引起手势冲突
[self.scrollView.panGestureRecognizer requireGestureRecognizerToFail:self.navigationController.interactivePopGestureRecognizer];
NNTitleSlideViewController.m
里的标签按钮自定义其实可以放在NNTitleSlideView
里,主要是为了好查找这个类型的view,我懒得拿出来了,理解就好
DEMO
效果

我最棒╭(╯^╰)╮(不允许反驳,你可以批评我的技术。但我不接受)
网友评论