2

アプリでUIBarButtonItemsをオフセットしようとしていますが、ナビゲーションバーに使用する画像のために、すべてが正しく整列するように、わずかにオフセットする必要があります。私はこれを次のように行うことができました:

[[UINavigationBar appearance] setTitleVerticalPositionAdjustment:-3 forBarMetrics:UIBarMetricsDefault];
    [[UIBarButtonItem appearance] setBackgroundVerticalPositionAdjustment:-3 forBarMetrics:UIBarMetricsDefault];
    [[UIBarButtonItem appearance] setBackButtonBackgroundVerticalPositionAdjustment:-3 forBarMetrics:UIBarMetricsDefault];

ただし、2つのクエリがあります。

  1. これにより、ボタンが強調表示された状態になり、機能しますが、目に見えて押し下げられたままになることはありません。とにかくこれの周り?

  2. さらに重要なことに、これはナビゲーションバーのボタンを上に押し上げるとうまく機能しますが、反対の必要がある画面の下部にあるツールバーでもボタンを押し上げます。実際には少し押し下げます。どうすればこれを処理できますか?

4

2 に答える 2

14

私は解決策を見つけました!以下を使用して、オブジェクトがどのビューにあるかに応じて、これらの外観属性を調整できます。

appearanceWhenContainedIn:

標準の代わりに

appearance

だから私はそのように私のニーズを実装し、ボタンがナビゲーションバーまたはツールバーにあるかどうかに応じて上下に調整しました:

[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] setBackgroundVerticalPositionAdjustment:-3 forBarMetrics:UIBarMetricsDefault];
    [[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] setBackButtonBackgroundVerticalPositionAdjustment:-3 forBarMetrics:UIBarMetricsDefault];

    [[UIBarButtonItem appearanceWhenContainedIn:[UIToolbar class], nil] setBackgroundVerticalPositionAdjustment:3 forBarMetrics:UIBarMetricsDefault];
    [[UIBarButtonItem appearanceWhenContainedIn:[UIToolbar class], nil] setBackButtonBackgroundVerticalPositionAdjustment:3 forBarMetrics:UIBarMetricsDefault];
于 2012-07-23T10:42:17.507 に答える
3

タブバーアイテムのフレームは直接操作できます。

// get the handle of your tabBar (probably self.tabBarController.tabBar
for (UIView *item in tabBar.items) {
    item.frame = CGRectOffset(item.frame, 0.0, -3.0);
}

位置を水平方向に調整するための邪魔にならない方法は、バーボタンアイテムの固定された柔軟なスペースを利用することです。

// this will put three pixels between whatever items it sits between
UIBarButtonItem *fixed = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil]
fixed.width = 3.0;

これらをitems配列に配置します。したがって、2つのアイテムを3pxで区切る場合は、次のようにします。

tabBar.items = [NSArray arrayWithObjects:button1, fixed, button2, nil];
于 2012-07-23T00:46:01.027 に答える