31

カスタムの左右の UINavigationBar アイテムの左右の水平パディングを削除するにはどうすればよいですか? iOS がデフォルトで設定する 10 ポイントまでのパディングがあるようです。

左と右のナビゲーション バー ボタンをカスタマイズしています (独自の backButtonItem を設定することをあきらめたため、leftBarButtonItem を使用しています)。

どちらの場合でも (左または右)、これらのカスタム ボタンを押すと、Apple は leftBarButtonItem の左側と rightBarButtonItem の右側にパディングを保持しているように見えます。UIButton のカスタム背景と画像プロパティの幅に関係なく、カスタム ビューとして左/右バー ボタン項目内に配置します。

UIBarButtonItems にはアクセスできる「フレーム」がないため、通常の UIView のようにスーパービュー内に配置することはできません。

このデフォルトのパディングを削除する方法について何か提案はありますか? 添付のスクリーンショットを参照して、幅をゼロに縮小しようとしているビットを確認してください。スクリーン ショットでは、プラス アイコンが右にずれて表示されています。これは、挿入したためです。ただし、強調表示された背景画像も、おそらくそのインセットを使用して、右側が切り取られています)。

次の画像を参照してください: https://skitch.com/starbaseweb/rj2e5/ios-simulator

参考までに、カスタム UIBarButtonItem を作成する方法を次に示します (この場合は、右のボタンです)。

- (UIBarButtonItem *)customAddButtonItemWithTarget:(id)target action:(SEL)action {
  UIButton *customButtonView = [UIButton buttonWithType:UIButtonTypeCustom];

    customButtonView.frame = CGRectMake(0.0f, 0.0f, 45.0f, 44.0f);

    [customButtonView setBackgroundImage:
        [UIImage imageNamed:@"bgNavBarButton-OutsideRight-Normal.png"] 
        forState:UIControlStateNormal];
    [customButtonView setBackgroundImage:
        [UIImage imageNamed:@"bgNavBarButton-OutsideRight-Highlighted.png"] 
        forState:UIControlStateHighlighted];

    [customButtonView setImage:
        [UIImage imageNamed:@"bgNavBarButton-Add-Normal.png"] 
        forState:UIControlStateNormal];
    [customButtonView setImage:
        [UIImage imageNamed:@"bgNavBarButton-Add-Highlighted.png"] 
        forState:UIControlStateHighlighted];

    [customButtonView addTarget:target action:action 
        forControlEvents:UIControlEventTouchUpInside];

    UIBarButtonItem *customButtonItem = [[[UIBarButtonItem alloc] 
        initWithCustomView:customButtonView] autorelease];
    [customButtonView setImageEdgeInsets:UIEdgeInsetsMake(0.0f, 10.0f, 0.0f, 0.0f)];

    //customButtonItem.imageInsets = UIEdgeInsetsMake(0.0f, 10.0f, 0.0f, 0.0f);

    return customButtonItem;    
}
4

2 に答える 2

83

55上でコメントしたように、私が行った解決策は、別の、しかし非常に関連する質問に対するこの回答に基づいています: UIToolBar の左右のパディングを調整する方法. また、1 つだけではなく、左側または右側に複数のボタンを設定できるようにする iOS5 によっても促進されます (依存しています)。

カスタムの左ボタン項目の左側のパディングを削除する例を次に示します。

UIBarButtonItem *backButtonItem // Assume this exists, filled with our custom view

// Create a negative spacer to go to the left of our custom back button, 
// and pull it right to the edge:
UIBarButtonItem *negativeSpacer = [[UIBarButtonItem alloc] 
    initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace 
    target:nil action:nil];
negativeSpacer.width = -5; 
// Note: We use 5 above b/c that's how many pixels of padding iOS seems to add

// Add the two buttons together on the left:
self.navigationItem.leftBarButtonItems = [NSArray 
    arrayWithObjects:negativeSpacer, backButtonItem, nil];

これにより、ナビゲーション バーの左バー ボタン項目の左パディングがなくなりました。

:これは、iOS5およびiOS6で機能しました。iOS7 が (パブリック デモとは) かなり異なることを考えると、iOS7 の初期のシードを持っている人は、このハックのような意図的でない何かが実際に iOS6 以降も機能し続けるかどうかをテストする必要があります。

于 2011-11-09T19:54:07.327 に答える
3

私はこれを試してみましたが、うまくいきます:

1) -drawRect: で何もせず、不透明ではなく、backgroundColor = [UIColor clearColor] を持つカスタム UIToolbar サブクラスを作成します。

2) ツールバーをカスタム ビューとしてカスタム UIBarButtonItem を作成します。

3) ボタンをカスタム ツールバーに追加します。

4) カスタム ツールバーで -layoutSubviews をオーバーライドし、独自の間隔を設定します。

于 2011-03-03T19:09:09.360 に答える