解决 iOS 7 UIBarButtonItem 在 navigationBar 中移位问题

来源:互联网 发布:关闭80端口会怎么样 编辑:程序博客网 时间:2024/06/05 22:38
在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_getClassMethod(self, @selector(setLeftBarButtonItem:)),
                                   class_getClassMethod(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

0 0
原创粉丝点击