在iOS 7中定位导航栏按钮

我在导航栏按钮上使用自定义图像。在iOS 6中,如果我们使用按钮设置左栏按钮项,其x值从10px开始。 但是在iOS 7中,如果我们做同样的事情,按钮的x值从20px开始。 我们有什么方法可以让它从10px开始,因为iOS 7中的按钮外观不是很好吗?

可以使用initWithCustomView:方法初始化UIBarButtonItems。 因此,您可以创建一些自定义视图(在您的情况下带有自定义图像的导航栏按钮项)并使用该自定义视图初始化栏按钮项。 例:

CustomView *view = [[CustomView alloc] initWithImage:[UIImage imageNamed:@"back.png"]]; UIBarButtonItem *backBtn = [[UIBarButtonItem alloc] initWithCustomView:view]; 

您可以在initWithImage中设置任何所需的帧:CustomView的方法:

 - (id)initWithImage:(UIImage *)image { self = [super initWithFrame:CGRectMake(0, 0, 50, 44)]; CGRect backArrowFrame; if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) { backArrowFrame = CGRectMake(-8, 12, 12.5, 20.5); } else { backArrowFrame = CGRectMake(-2, 12, 12.5, 20.5); } UIButton *imView = [[UIButton alloc] initWithFrame:backArrowFrame]; [imView setContentMode:UIViewContentModeScaleAspectFit]; [imView setBackgroundImage:image forState:UIControlStateNormal]; [imView addTarget:target action:@selector(backButtonPressed) forControlEvents:UIControlEventTouchUpInside]; [self addSubview:imView]; return self; } 

通过这种方式,可以更改UIBarButtonItem的框架。

不,您无法更改UIBarButtonItem框架。 相反,子类UINavigationBar

在ios7中添加按钮作为导航项,如下所示

 UIButton *btnAdd = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 60, 30)]; [btnAdd setContentMode:UIViewContentModeScaleAspectFit]; [btnAdd setBackgroundImage:[UIImage imageNamed:@"back.png"] forState:UIControlStateNormal]; [btnAdd addTarget:self action:@selector(backButtonPressed:) forControlEvents:UIControlEventTouchUpInside]; UIBarButtonItem *btnAdd = [[UIBarButtonItem alloc] initWithCustomView:imView]; self.navigationItem.rightBarButtonItem = btnAdd;