12

UIToolbarカスタム画像を使用して 5 つのボタンを作成しようとしています。私がこれを行っている方法は、タイプのボタンを作成し、次にこれらからUIButtonTypeCustom作成UIBarButtonItemsし、これらをツールバーに追加することsetItems:animated:です。ただし、これにより画像間にスペースが追加され、5 番目の画像がツールバーの右側から半分はみ出してしまいます。これらのスペースを取り除くにはどうすればよいですか? 考えられることはすべて試しました。

助けていただければ幸いです。

これについて私がどのように行っているかについてのコード例を次に示します。

UIButton *button;
UIBarButtonItem *barButton1,*barButton2;

button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setImage:[UIImage imageNamed:@"image1.png"] forState:UIControlStateNormal];
button.bounds = CGRectMake(0,0,button.imageView.image.size.width, button.imageView.image.size.height);
[button addTarget:self action:@selector(action:) forControlEvents:UIControlEventTouchUpInside];
barButton1 = [[UIBarButtonItem alloc] initWithCustomView:button];


button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setImage:[UIImage imageNamed:@"bart_tb.png"] forState:UIControlStateNormal];
button.bounds = CGRectMake(0,0,button.imageView.image.size.width, button.imageView.image.size.height);
[button addTarget:self action:@selector(action:) forControlEvents:UIControlEventTouchUpInside];
barButton2 = [[UIBarButtonItem alloc] initWithCustomView:button];

NSArray *items = [NSArray arrayWithObjects: barButton1, barButton2, nil];
[self.toolbar setItems:items animated:NO];
4

10 に答える 10

17

あなたが探しているのは、UIBarButtonItems をデフォルトよりも小さい、または 0 の垂直間隔 (私のように) でレイアウトすることです。これは、UIToolBar を購入するためにすべて自動的に行われます。これが私がお勧めするものです:

UIToolBar は、アイテムをプライベートにレイアウトします。Apple のエンジニアは、開発者がそれを上書きすることを期待することは決してありません。固定スペースを使用してデフォルトの 10Point 水平スペースを上書きするだけでは十分ではありません。UIToolbar はアイテムを少なくとも 10 ポイント離してレイアウトするため、次のコードに示すように、これらの UIBarButtonItems の幅を -10 に設定して間隔を空けないようにします。

CGFloat toolbarHeight = 44.0;
CGRect toolbarFrame = CGRectMake(0,0, self.view.bounds.size.width, toolbarHeight);
UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:toolbarFrame];

UIBarButtonItem* noSpace = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil] autorelease];
UIBarButtonItem* noSpace1 = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil] autorelease];

noSpace.width = -10.0;
noSpace1.width = -10.0;

[toolbar setItems:[NSArray arrayWithObjects:
                   [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:nil action:nil] autorelease],
                   noSpace,
                   [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemTrash target:nil action:nil] autorelease],
                   noSpace1,
                   [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCompose target:nil action:nil] autorelease]
                   , nil]];
于 2011-10-09T10:49:53.253 に答える
5

各アイテムの間にスペーサーを追加すると、間隔がうまくいくはずです。あなたの場合、2つのボタンの両側とその間にスペーサーを配置することをお勧めします。あなたはそのようにこれを行うことができます:

UIBarButtonItem *spacer = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];

NSArray *items = [[NSArray alloc] initWithObjects: spacer, barButton1, spacer, barButton2, spacer, nil];

[spacer release];

UIBarButtonSystemItemFixedSpaceを使用することもできますが、その'width'プロパティを明示的に指定する必要があることに注意してください。UIBarButtonSystemItemFlexibleSpaceがこれをうまく機能させるのに対し、それは思われるでしょう。

于 2009-11-25T03:01:50.840 に答える
2

間隔を補正するために、アイテム間に負の幅を持つ固定スペース アイテムを追加することができます。

UIBarButtonItem *fixedSpace = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil] autorelease];
fixedSpace.width = -12.0f;
于 2011-06-22T19:19:31.247 に答える
2

これは非常に古い質問ですが、同じ問題に遭遇し、なんとか解決できました。

魔法のパスワードは、UIBarButtonItem スタイルを UIBarButtonItemStyleBordered に設定しています。

UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithCustomView:aView];
item.style = UIBarButtonItemStyleBordered;

それでおしまい...

于 2011-02-15T23:35:41.550 に答える
2

2 つのバー ボタンの間に UIBarButtonSystemItemFixedSpace を取得できます。幅を調整します。うまくいきました。

于 2012-02-02T07:47:15.250 に答える
2

この問題は解決しました。各ボタンの前後に柔軟なアイテムを使用する必要があります。

    UIBarButtonItem *flexibleSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];

ツールバーに設定される項目の配列に flexibleSpace を追加するだけです。

psこれを取り除く前に私はほとんど自殺し、UIToolBarの代わりに他のバーを使用するなど、あらゆる種類のソリューションを試しました。

于 2010-09-16T07:07:59.937 に答える
1

Xcode4では、柔軟なスペースを左端のアイテムとして配置し、次に別のスペースを右端のアイテムとして配置することで、これを解決することができました。

ここに画像の説明を入力してください
ここに画像の説明を入力してください

于 2012-01-04T18:12:35.520 に答える
1

同じ問題に遭遇しました。最後に、UIToolbar をサブクラス化し、レイアウト サブビュー メソッドをオーバーライドすることでこれを解決しました。

- (void)layoutSubviews {

  [super layoutSubviews];

  if (leftItem_ && leftItem_.customView
      && [leftItem_.customView isKindOfClass:[UIButton class]]) {
    CGRect newFrame = leftItem_.customView.frame;
    newFrame.origin.x = 0;   // reset the original point x to 0; default is 12, wired number
    leftItem_.customView.frame = newFrame;    
  }

  if (rightItem_ && rightItem_.customView
      && [rightItem_.customView isKindOfClass:[UIButton class]]) {
    CGRect newFrame = rightItem_.customView.frame;
    newFrame.origin.x = self.frame.size.width - CGRectGetWidth(newFrame);
    rightItem_.customView.frame = newFrame;
  }

}
于 2011-08-25T05:56:06.173 に答える
0
UIBarButtonItem *barButton1,*barButton2;

barButton1 = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"image1.png"] style:UIBarButtonItemStylePlain
    target:self action:@selector(action:)];

barButton2 = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"bart_tb.png"] style:UIBarButtonItemStylePlain
    target:self action:@selector(action:)];

NSArray *items = [[NSArray alloc] initWithObjects: barButton1, barButton2, nil];
[barButton1 release];
[barButton2 release];
[self.toolbar setItems:items animated:NO];
[items release];

ボタンの幅を変更したい場合は、UIBarButtonItem オブジェクトの width プロパティを設定します。width のデフォルト値は 0 で、画像/タイトルに正確に収まる十分な大きさになります。

それが役立つことを願っています。

于 2009-08-02T22:16:23.203 に答える
0

今日も同じ問題に直面し、簡単な方法で解決しましたので、共有します。

同じ番号を持つ新しい UIView を取得できます。表示したいツールバーのボタンの 次に、ツールバーに従ってサイズを設定します。

要するに、ツールバーの上の通常のボタンは、ツールバーのボタンのように見えます。

于 2013-09-16T11:15:50.390 に答える