//导航控制器全局设置导航按钮
//基础的导航控制器,统一处理返回按钮偏移的问题
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface QMWNBasenav : UINavigationController
@property (nonatomic,assign) BOOL isAlwaysShadow;
@end
NS_ASSUME_NONNULL_END
****
//基础的导航控制器,统一处理返回按钮偏移的问题
#import "QMWNBasenav.h"
@interface QMWNBasenav ()
@property(nonatomic,strong)UIImage * shadowView;
@end
@implementation QMWNBasenav
+ (void)initialize
{
// UINavigationBar *bar = [UINavigationBar appearanceWhenContainedIn:[self class], nil];
UINavigationBar *bar = [UINavigationBar appearance];
//[bar setBarTintColor:[UIColor gradientFromColor:gradiantFromColor toColor:gradiantToColor withWidth:SCREEN_WIDTH]];
[bar setTitleTextAttributes:@{NSFontAttributeName : [UIFont systemFontOfSize:20],NSForegroundColorAttributeName:[UIColor blackColor]}];
[bar setShadowImage:[[UIImage alloc] init]];
// 设置item
UIBarButtonItem *item = [UIBarButtonItem appearance];
// UIControlStateNormal
NSMutableDictionary *itemAttrs = [NSMutableDictionary dictionary];
itemAttrs[NSForegroundColorAttributeName] = [UIColor blackColor];
itemAttrs[NSFontAttributeName] = [UIFont systemFontOfSize:17];
[item setTitleTextAttributes:itemAttrs forState:UIControlStateNormal];
// UIControlStateDisabled
NSMutableDictionary *itemDisabledAttrs = [NSMutableDictionary dictionary];
itemDisabledAttrs[NSForegroundColorAttributeName] = [UIColor lightGrayColor];
[item setTitleTextAttributes:itemDisabledAttrs forState:UIControlStateDisabled];
}
- (void)viewDidLoad {
[super viewDidLoad];
// [self.navigationBar setBackgroundImage:[UIImage imageNamed:@""] forBarMetrics:UIBarMetricsDefault];
// 如果滑动移除控制器的功能失效,清空代理(让导航控制器重新设置这个功能)
[self.interactivePopGestureRecognizer setEnabled:NO];
}
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{
if (self.childViewControllers.count > 0) { // 如果push进来的不是第一个控制器
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setImage:[UIImage imageNamed:@"navi_arrow_back"] forState:UIControlStateNormal];
button.size = CGSizeMake(40, 30);
// 让按钮内部的所有内容左对齐
button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
// [button sizeToFit];
// 让按钮的内容往左边偏移10
button.contentEdgeInsets = UIEdgeInsetsMake(0, 0, 0, 0);
[button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
[button setTitleColor:[UIColor whiteColor] forState:UIControlStateHighlighted];
[button addTarget:self action:@selector(back) forControlEvents:UIControlEventTouchUpInside];
// 修改导航栏左边的item
viewController.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:button];
// 隐藏tabbar
viewController.hidesBottomBarWhenPushed = YES;
[self.navigationBar setShadowImage:self.shadowView];
}else{
if(self.isAlwaysShadow)
{
[self.navigationBar setShadowImage:self.shadowView];
}else{
[self.navigationBar setShadowImage:[[UIImage alloc]init]];
}
}
// 这句super的push要放在后面, 让viewController可以覆盖上面设置的leftBarButtonItem
[super pushViewController:viewController animated:animated];
}
- (UIViewController *)popViewControllerAnimated:(BOOL)animated{
if (self.childViewControllers.count > 2){
[self.navigationBar setShadowImage:self.shadowView];
}else{
if(self.isAlwaysShadow)
{
[self.navigationBar setShadowImage:self.shadowView];
}else{
[self.navigationBar setShadowImage:[[UIImage alloc]init]];
}
}return [super popViewControllerAnimated:animated];
}
- (void)back
{
[self popViewControllerAnimated:YES];
}
@end
//添加返回按钮
-(void)backBtn{
UIButton *backBtn=[[UIButtonalloc]initWithFrame:CGRectMake(0,10,60,20)];
[backBtn setTitle:@"返回"forState:UIControlStateNormal];
backBtn.titleLabel.font=[UIFontsystemFontOfSize:12];
backBtn.imageEdgeInsets=UIEdgeInsetsMake(2,2,2,2);
[backBtn setImage:[UIImageimageNamed:@"fanhui"]forState:UIControlStateNormal];
[backBtn addTarget:self action:@selector(backto)forControlEvents:UIControlEventTouchDown];
UIBarButtonItem *leftBtn=[[UIBarButtonItemalloc]initWithCustomView:backBtn];
UIBarButtonItem *flexBtn=[[UIBarButtonItemalloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpacetarget:nilaction:nil];
flexBtn.width=-10;//正数往左移,负数往右移
self.navigationItem.leftBarButtonItems=@[flexBtn,leftBtn];
}
//返回按钮
-(void)backto{
[selfdismissViewControllerAnimated:YEScompletion:^{
}];
}
兼容IOS11:
//返回按钮
-(void)addbackBtn{
UIButton *bbtn=[[UIButtonalloc]initWithFrame:CGRectMake(0, 0, 60, 30)];
[bbtn setImage:[UIImageimageNamed:@"icon_navigation_back"]forState:UIControlStateNormal];
[bbtn addTarget:selfaction:@selector(backBtn)forControlEvents:UIControlEventTouchDown];
UIBarButtonItem *fixBtn=[[UIBarButtonItemalloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpacetarget:selfaction:nil];
//兼容IOS11
CGFloat sysv= [[[UIDevicecurrentDevice]systemVersion]floatValue];
if(sysv==11.0){
bbtn.contentHorizontalAlignment =UIControlContentHorizontalAlignmentLeft;
[bbtn setImageEdgeInsets:UIEdgeInsetsMake(0,0,0,0)];
}
if(sysv==11.0){
}else {
fixBtn.width=-30;
}
UIBarButtonItem *backbtn=[[UIBarButtonItemalloc]initWithCustomView:bbtn];
NSArray *btnArr=@[fixBtn,backbtn];
self.navigationItem.leftBarButtonItems=btnArr;
}
========右侧按钮=======
//设置导航右边按钮
-(void)addrightBtn{
UIButton *rightBtn=[[UIButtonalloc]initWithFrame:CGRectMake(0, 0, 60, 30)];
[rightBtn setImage:[UIImageimageNamed:@"tianjia"]forState:UIControlStateNormal];
[rightBtn addTarget:selfaction:@selector(addListBtn)forControlEvents:UIControlEventTouchDown];
UIBarButtonItem *rbtn=[[UIBarButtonItemalloc]initWithCustomView:rightBtn];
UIBarButtonItem *fixBtn=[[UIBarButtonItemalloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpacetarget:nilaction:nil];
fixBtn.width=0;
self.navigationItem.rightBarButtonItems=@[fixBtn,rbtn];
}
//兼容IOS11
//设置导航右边按钮
-(void)addrightBtn{
UIButton *rightBtn=[[UIButton alloc]initWithFrame:CGRectMake(0, 0, 100, 30)];
[rightBtn setTitleColor:[UIColorwhiteColor]forState:UIControlStateNormal];
[rightBtn setTitle:@"设置"forState:UIControlStateNormal];
//兼容IOS11
CGFloat sysv= [[[UIDevicecurrentDevice]systemVersion]floatValue];
if(sysv==11.0){
rightBtn.contentHorizontalAlignment =UIControlContentHorizontalAlignmentRight;
[rightBtn setTitleEdgeInsets:UIEdgeInsetsMake(0,0,0,0)];
}
[rightBtn.titleLabelsetFont:[UIFontsystemFontOfSize:14weight:UIFontWeightThin]];
[rightBtn addTarget:selfaction:@selector(addListBtn)forControlEvents:UIControlEventTouchDown];
UIBarButtonItem *rbtn=[[UIBarButtonItemalloc]initWithCustomView:rightBtn];
UIBarButtonItem *fixBtn=[[UIBarButtonItemalloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpacetarget:nilaction:nil];
if(sysv==11.0){
}else {
fixBtn.width=-30;
}
self.navigationItem.rightBarButtonItems=@[fixBtn,rbtn];
}
-(void)addListBtn{
}