11

何らかの理由で、ナビゲーション バーの右ボタンが右から 16px の位置にあります。余白を小さくしたい。それを行う適切な方法は何ですか?

self.btnDone = [UIButton buttonWithType:UIButtonTypeCustom];
UIImage *btnImgDone = [UIImage imageNamed:@"btn_small_default.png"];
self.btnDone.titleLabel.font = [UIFont fontWithName:@"HelveticaNeue-Bold" size:15.0];
[self.btnDone setTitle:@"Done" forState:UIControlStateNormal];
[self.btnDone setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[self.btnDone setTitleShadowColor:[UIColor colorWithWhite:0 alpha:.2f] forState:UIControlStateNormal];
self.btnDone.titleLabel.shadowOffset = (CGSize){0,-1};
[self.btnDone setBackgroundImage:btnImgDone forState:UIControlStateNormal];
[self.btnDone setBackgroundImage:[UIImage imageNamed:@"btn_small_active.png"] forState:UIControlStateHighlighted];  

self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:self.btnDone];

ここに画像の説明を入力

4

4 に答える 4

8

私は同じ問題を抱えていましたが、それを修正するために見つけた唯一の方法はsetImageEdgeInsets:.

ボタンを右に移動する場合 (例: 5 ポイントまたは 10 ピクセル)、次の行をボタン宣言に追加します。

UIEdgeInsets buttonEdges = UIEdgeInsetsMake(0, 5, 0, -5);
[self.btnDone setImageEdgeInsets:buttonEdges];

iOS6 と iOS7 をサポートしたい場合は、次のようにします。

CGFloat xOffset;

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0f)
{
    // for ios7
    xOffset = 5.0f;
}
else
{
    // ios6
    xOffset = 2.0f;
}

UIEdgeInsets buttonEdges = UIEdgeInsetsMake(0, xOffset, 0, - xOffset);
[self.btnDone setImageEdgeInsets:buttonEdges];

それが役に立てば幸い !

于 2013-09-30T08:35:07.317 に答える
6

そのボタンの後に固定スペースを入れてみてください:

// Fixed space
UIBarButtonItem *fixedSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
[fixedSpace setWidth:20.0];

self.navigationItem.rightBarButtonItems = @[fixedSpace, yourButton];

私が使用したコード全体は次のとおりです。

// Bar button
UIButton *loadButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 15, 34)];
VVdLoadImage *loadImage = [[VVdLoadImage alloc] initWithFrame:CGRectMake(0, 0, 15, 34)];
loadImage.backgroundColor = [UIColor clearColor];
loadImage.userInteractionEnabled = NO;
[loadButton addSubview:loadImage];

[loadButton addTarget:self action:@selector(loadCards) forControlEvents:UIControlEventTouchDown];
UIBarButtonItem *loadBarButton = [[UIBarButtonItem alloc] initWithCustomView:loadButton];

UIBarButtonItem *fixedSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
[fixedSpace setWidth:20.0];

self.navigationItem.rightBarButtonItems = @[fixedSpace, loadButton];
于 2013-09-30T09:07:12.163 に答える
1

私を参照してください。

func addLogOutButtonToNavigationBar(triggerToMethodName: String)
{
    let button: UIButton = UIButton()
    button.setImage(UIImage(named: "logOff.png"), forState: .Normal)
    button.frame = CGRectMake(20, 0, 30, 25)
    button.contentEdgeInsets = UIEdgeInsets.init(top: 0, left: 10, bottom: 0, right: -10)

    button .addTarget(self, action:Selector(triggerToMethodName), forControlEvents: UIControlEvents.TouchUpInside)
    let rightItem:UIBarButtonItem = UIBarButtonItem()
    rightItem.customView = button
    self.navigationItem.rightBarButtonItem = rightItem
}
于 2015-11-19T08:08:44.913 に答える
0

それでもうまくいかない場合は、何らかの理由でこれがうまくいきました。someButton は、UIBarButtonItem の customView として追加した UIButton です。

someButton.contentEdgeInsets = (UIEdgeInsets){.right=-20};
于 2015-02-17T14:27:00.470 に答える