比较简单的一款导航切换。
当然其他大神的都很好,只是自己写可以随意改,被各种bug烦死了。
demo和使用方法在底部。
//代码解读 ///最开始是将标签按钮放在了navigationBar上,这样造成一个问题,标签切换页面不是一级,标签navigation返回时隐藏/remove标签不会跟随手指pop 页面隐藏,不太美观,所以解读层级关系图,返回按钮既然也在nav上,说明可以做到跟随隐藏
#!!!该方法废弃(视图会出现重叠)
//找到这个contentView添加标签view,完美解决跟随问题
//LSSTitleSliderViewController.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 == LSSTitleSliderStyleCenter) {
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;
}
使用 参考DEMO
navigationbar不可以隐藏!!!!!
不需要侧滑可以不加
//使带有scrollview的页面拥有侧滑手势,否则会引起手势冲突
[self.scrollView.panGestureRecognizer requireGestureRecognizerToFail:self.navigationController.interactivePopGestureRecognizer];