UIBarButtonItem (locationButton) の表示をカスタマイズする次のコードがあります。
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 に調整したいと思います。これは、NavigationBar が通常よりも高い (Appearance を使用してカスタマイズされている) ためです。
コードでわかるように、setBackgroundVerticalPositionAdjustment メソッドを使用してそれを行います。しかし、UIBarButtonItem ではまったく機能しません。どのオフセットを配置しても、ボタンは常にバーの下部 (スナップショット) の近くに表示されます。しかし、通常の UIBarButtonItem を通常のスタイル (ボタンと呼んだもの) で使用すると、ボタンの位置が -20 のオフセットでどのように変更されるかがわかります。とても奇妙です...何かアイデアはありますか?
ありがとうございました!