2013-05-08 47 views
4

我有下面的代码,以自定义的UIBarButtonItem(locationButton)的显示:的UIBarButtonItem:setBackgroundVerticalPositionAdjustment不与自定义按钮正常工作

UIButton *locationButtonAux = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [locationButtonAux setFrame:CGRectMake(0, 0, LOCATION_BUTTON_WIDTH, LOCATION_BUTTON_HEIGHT)]; 
    [locationButtonAux setBackgroundImage:[UIImage imageNamed:@"location_button.png"] forState:UIControlStateNormal]; 
    [locationButtonAux setBackgroundImage:[UIImage imageNamed:@"location_button.png"] forState:UIControlStateHighlighted]; 
    [locationButtonAux addTarget:self action:@selector(userLocation) forControlEvents:UIControlEventTouchUpInside]; 
    UIBarButtonItem *locationButton = [[UIBarButtonItem alloc] initWithCustomView:locationButtonAux]; 
    UIBarButtonItem * item = [[UIBarButtonItem alloc] initWithTitle:@"title" 
                   style:UIBarButtonItemStyleDone 
                  target:nil action:@selector(someMssage)]; 
    [locationButton setBackgroundVerticalPositionAdjustment:-20.0 forBarMetrics:UIBarMetricsDefault]; 
    self.navigationItem.rightBarButtonItem = locationButton; 

我想调整这个按钮进入导航栏的位置,因为我的NavigationBar比正常高(使用Appeareance进行自定义)。

我使用方法setBackgroundVerticalPositionAdjustment,就像你在代码中看到的那样。但是根本不用我的UIBarButtonItem,不管我放在那里的偏移量是多少,按钮总是出现在靠近条的底部(快照)的位置。 但是,如果我使用普通样式(我称之为按钮)的普通UIBarButtonItem,我可以看到按钮的位置将如何改变-20的偏移量。很奇怪...任何想法?

谢谢!

enter image description here

+1

看一看http://stackoverflow.com/a/16442006/1328096它将帮助你完全.. – jamil 2013-05-08 17:48:19

+0

一个永远不会接受答案的提问者(checkmark)没有提供很多动力让人们花时间帮助他。 – matt 2013-05-10 04:02:02

回答

3

也许这样的事情会为你工作:

UIView *rightView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 150, 30)]; //change this frame to counteract for your taller navbar 
[rightView addSubview:locationButtonAux]; 
UIBarButtonItem *rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:rightView]; 
self.navigationItem.rightBarButtonItem = rightBarButtonItem; 

希望这有助于

1

你需要把按钮空白视图中的空白视图,并且其位置内。现在使该视图成为条形按钮项目的自定义视图。

你真的不需要按钮,因为这只是一个图像,你不使用任何按钮功能(你可以附加一个手势识别器来点击水龙头)。因此,这里是使用图像视图一个简单的解决方案:

UIImageView *locationButtonAux = 
    [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"location_button.png"]]; 
UIView* v = [[UIView alloc] initWithFrame:locationButtonAux.frame]; 
[v addSubview:locationButtonAux]; 
CGRect f = locationButtonAux.frame; 
f.origin.y -= 10; 
locationButtonAux.frame = f; 
UIBarButtonItem *locationButton = [[UIBarButtonItem alloc] initWithCustomView:v]; 
self.navigationItem.rightBarButtonItem = locationButton; 

我忽略了手势识别的部分,但你可以很容易地看到如何添加它。