4

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 のオフセットでどのように変更されるかがわかります。とても奇妙です...何かアイデアはありますか?

ありがとうございました!

ここに画像の説明を入力

4

2 に答える 2

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;

ジェスチャ認識機能の部分は省略しましたが、追加方法は簡単にわかります。

于 2013-05-08T16:38:47.110 に答える