4

アプリ内で UINavigationController とそのバーを使用しています。ここで、leftBarButtonItem と rightBarButtonItem の位置を変更したいと思います。カスタムの幅と高さを持つ別の x と y の位置に配置したい。

しかし、問題は、フレームを変更しても、barButtonItem で何も変更されないことです。理由はわかりませんが、フレームは常に元の座標にリセットされます。

viewWillAppear で呼び出すコードは次のとおりです。

UINavigationItem *navItem = [[self.navigationBar items] lastObject];

UIView *rightview = [[UIView alloc] initWithFrame:CGRectMake(0,0,66,30)];
rightview.backgroundColor = [UIColor blueColor];

//add custom view
UIBarButtonItem *search = [[UIBarButtonItem alloc] initWithCustomView:rightview];
navItem.leftBarButtonItem = search;

そして、これが結果です

ビューは 0/0 から始まっていません。たとえば、x 位置は 0 から 5px の位置にあります。

この問題を解決する方法について何か提案はありますか?

4

2 に答える 2

12

これは leftBarButtonItem でうまくいきました: UIBarButtonItem を正確に位置 (0, 0) に表示したい場合は、UIButton を作成し、そのフレームを (-5, 0, width, height) に設定します。左のバーボタン項目は (5, 0) であり、それを leftBarButtonItem として設定した UIView に配置します。

#import "UINavigationItem+CSAButtons.h"

@implementation UINavigationItem (CSAButtons)


- (void) makeLeftBarButtonWithTarget:(id)target action:(SEL)action {

    UIImage * imageNormal = [UIImage imageNamed:@"normal.png"]; 
    UIImage * imageHighlighted = [UIImage imageNamed:@"highlighted.png"]; 
    UIImage * imageDisabled = [UIImage imageNamed:@"disabled.png"]; 

    // create your button
    UIButton * button = [UIButton buttonWithType:UIButtonTypeCustom];
    button.exclusiveTouch = YES;
    [button addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];
    [button setBackgroundImage:imageNormal forState:UIControlStateNormal];
    [button setBackgroundImage:imageHighlighted forState:UIControlStateHighlighted];
    [button setBackgroundImage:imageDisabled forState:UIControlStateDisabled];

    // set the frame of the button (better to grab actual offset of leftbarbuttonitem instead of magic numbers)
    button.frame = CGRectMake(-5.0, 0.0, imageNormal.size.width, imageNormal.size.height);
    UIView * view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, imageNormal.size.width, imageNormal.size.height)];
    [view addSubview:button];

    // set the barbuttonitem to be the view
    UIBarButtonItem * barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:view];
    self.leftBarButtonItem = barButtonItem;
}
于 2013-04-27T21:37:21.100 に答える
3

a を移動する機能はないと思いますが、その要素をサブビューとして navigationBar (または)UIBarButtonItemに追加することで、同じ効果を実現できる可能性があります。少し遊んでみる必要があります。これにより、柔軟性が大幅に向上するはずです。UIViewnavItem

お役に立てれば。

于 2012-08-22T17:57:08.083 に答える