解决 UIBarButtonItem 移位问题

在iOS7 出来混之前,我们的项目里 NavigationBar 很多地方用到个性化的button, 经常会用以下的代码生成一个NavigationBar 中的按钮。

UIButton *button = [UIButton alloc] initWithFrame:...];

[button setImage: ... forState: ...];

UIBarButtonItem *barButton = [[UIBarButtonItem alloc] initWithCustomView: button];

使用以上的代码,你可以给这个barButton 加任何的图片,在iOS6/5 中运行没有任何问题,但在iOS 7中,这个barButton 会往里靠拢大概 10 个points.

以下代码解决了左边的button 移位问题,大家可以依葫芦画瓢,把右边的方法加上。

#import <UIKit/UIKit.h>

@interface UINavigationItem (Spacing)

@end

-------

#import "UINavigationItem+Spacing.h"

#import <objc/runtime.h>

#import <objc/message.h>

@implementation UINavigationItem (Spacing)

// load 在初始化类时调用,每个类都有一个load 方法,

// 类的初始化先于对象

+(void)load

{

//以下方法告诉系统用后面的方法替换前面的

method_exchangeImplementations(

class_getInstanceMethod(self, @selector(setLeftBarButtonItem:)),

class_getInstaceMethod(self, @selector(mySetLeftBarButtonItem:)));

}

- (UIBarButtonItem *)spacer

{

UIBarButtonItem *space = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace

target:nil action:nil];

space.width = -10.0f;

return space ;

}

-(void)mySetLeftBarButtonItem:(UIBarButtonItem*)barButton

{

NSArray* barButtons = nil;

barButtons = [NSArray arrayWithObjects: [self spacer], barButton,nil ];

[self setLeftBarButtonItems: barButtons];

}

@end


原文地址: http://weibo.com/p/1001603699748199641394


另外,在github上也看到一个解决方案(与上面的方案没有本质区别):https://github.com/lemonlabs/UINavigationItem-iOS7Spacing



你可能感兴趣的:(uibarbuttonitem,iOS7导航栏按钮移动)