升级ios11后,问题颇多,原来的返回按钮,也按不到了,原因,官方api有写,我就直接放代码算了
#import <UIKit/UIKit.h>
@interface BackView:UIView
@property(nonatomic,strong)UIButton *btn;
@end
@interface UIBarButtonItem (VICAddition)
+ (UIBarButtonItem *)itemWithTitle:(NSString *)title target:(id)target action:(SEL)action;
+ (UIBarButtonItem *)itemWithIcon:(NSString *)icon highIcon:(NSString *)highIcon target:(id)target action:(SEL)action;
@end
#import "UIBarButtonItem+VICAddition.h"
#import "UIView+VICExtension.h"
@implementation BackView
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
self.backgroundColor = [UIColor clearColor];
}
return self;
}
-(void)layoutSubviews{
[super layoutSubviews];
UINavigationBar *navBar = nil;
UIView *aView = self.superview;
while (aView) {
if ([aView isKindOfClass:[UINavigationBar class]]) {
navBar = (UINavigationBar *)aView;
break;
}
aView = aView.superview;
}
UINavigationItem * navItem = (UINavigationItem *)navBar.items.lastObject;
UIBarButtonItem *leftItem = navItem.leftBarButtonItem;
UIBarButtonItem *rightItem = navItem.rightBarButtonItem;
if (rightItem) {//右边按钮
BackView *backView = rightItem.customView;
if ([backView isKindOfClass:self.class]) {
backView.btn.vic_x = backView.width -backView.btn.width;
}
}
if (leftItem) {//左边按钮
// BackView *backView = leftItem.customView;
}
}
@end
@implementation UIBarButtonItem (VICAddition)
+ (UIBarButtonItem *)itemWithIcon:(NSString *)icon highIcon:(NSString *)highIcon target:(id)target action:(SEL)action {
BackView *customView = [[BackView alloc] initWithFrame:CGRectMake(0, 0, 80, 44)];
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:target action:action];
[customView addGestureRecognizer:tap];
customView.btn = [UIButton buttonWithType:UIButtonTypeCustom];
customView.btn.titleLabel.font = [UIFont systemFontOfSize:16.0];
if (icon) {
[customView.btn setBackgroundImage:[UIImage imageNamed:icon] forState:UIControlStateNormal];
}
if (highIcon) {
[customView.btn setBackgroundImage:[UIImage imageNamed:highIcon] forState:UIControlStateHighlighted];
}
customView.btn.frame = CGRectMake(0, 0, customView.btn.currentBackgroundImage.size.width, customView.btn.currentBackgroundImage.size.height);
customView.btn.centerY = customView.centerY;
[customView.btn addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];
[customView addSubview:customView.btn];
return [[UIBarButtonItem alloc] initWithCustomView:customView];
}
+ (UIBarButtonItem *)itemWithTitle:(NSString *)title target:(id)target action:(SEL)action {
UIButton *btn = [[UIButton alloc] init];
[btn setTitle:title forState:UIControlStateNormal];
btn.titleLabel.font = [UIFont systemFontOfSize:16.0];
[btn setTitleColor:[UIColor lightGrayColor] forState:UIControlStateDisabled];
[btn addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];
btn.titleEdgeInsets = UIEdgeInsetsMake(0, 0, 0, -15);
btn.frame = CGRectMake(0, 0, title.length * 18, 30);
return [[UIBarButtonItem alloc] initWithCustomView:btn];
}
@end
具体调用就很简单了
viewController.navigationItem.leftBarButtonItem = [UIBarButtonItem itemWithIcon:@"greenBack" highIcon:@"" target:self action:@selector(back)];
// 隐藏底部的工具条
viewController.hidesBottomBarWhenPushed = YES;