本文共 7060 字,大约阅读时间需要 23 分钟。
//导航控制器全局设置导航按钮
//基础的导航控制器,统一处理返回按钮偏移的问题#importNS_ASSUME_NONNULL_BEGIN@interface QMWNBasenav : UINavigationController@property (nonatomic,assign) BOOL isAlwaysShadow;@endNS_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{
}
转载地址:http://gwmgi.baihongyu.com/