我正在使用导航栏按钮的自定义图像。在iOS 6中,如果我们使用按钮设置左栏按钮项,则其x值从10px开始。但是在iOS 7中,如果我们做同样的事情,按钮的x值从20px开始。我们有什么方法可以让它从10px开始,因为在iOS 7中按钮外观不是很好吗?
答案 0 :(得分:1)
可以使用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的框架。
答案 1 :(得分:0)
不,您无法更改UIBarButtonItem
框架。相反,子类UINavigationBar
。
答案 2 :(得分:0)
在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;