この問題を解決するために数日を費やしたので、解決策を共有することにしました。これにより、家族により多くの時間を割くことができます。
多数のボタン (5 など) を収容する必要がある UIToolbar があるとします。ユーザーが左端または右端のボタンをクリックしようとすると、代わりに隣接するボタンを押すことがよくあります。当初、コードは次のように見えました。
self.bookmarkButton = [[[UIBarButtonItem alloc] ...;
self.sendButton = [[[UIBarButtonItem alloc] ...;
self.backstageButton = [[[UIBarButtonItem alloc] ...;
self.voteButton = [[[UIBarButtonItem alloc] ...;
self.vipButton = [[[UIBarButtonItem alloc] ...;
UIBarButtonItem *sep0 = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil] autorelease];
UIBarButtonItem *sep1 = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil] autorelease];
UIBarButtonItem *sep2 = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil] autorelease];
UIBarButtonItem *sep3 = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil] autorelease];
[self setItems:[[[NSArray alloc] initWithObjects: self.bookmarkButton, sep0, self.sendButton, sep1, self.voteButton , sep2, self.backstageButton, sep3, self.vipButton, nil] autorelease]];
ボタンの幅を明示的に設定したり、セパレーターを削除したり、左端と右端のボタンの幅を広げたりするなど、いくつかの手法を試しましたが、さまざまな理由でうまくいきませんでした。
この問題を解決する最も確実な方法は、セパレーターを 2 つ追加することでした。1 つは左端のボタンの左に、もう 1 つは右端のボタンの右に配置します。そんな感じ:
self.bookmarkButton = [[[UIBarButtonItem alloc] ...;
self.sendButton = [[[UIBarButtonItem alloc] ...;
self.backstageButton = [[[UIBarButtonItem alloc] ...;
self.voteButton = [[[UIBarButtonItem alloc] ...;
self.vipButton = [[[UIBarButtonItem alloc] ...;
UIBarButtonItem *sep0 = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil] autorelease];
UIBarButtonItem *sep1 = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil] autorelease];
UIBarButtonItem *sep2 = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil] autorelease];
UIBarButtonItem *sep3 = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil] autorelease];
UIBarButtonItem *sepLeft = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil] autorelease];
UIBarButtonItem *sepRight = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil] autorelease];
[self setItems:[[[NSArray alloc] initWithObjects: sepLeft, self.bookmarkButton, sep0, self.sendButton, sep1, self.voteButton , sep2, self.backstageButton, sep3, self.vipButton, sepRight, nil] autorelease]];
これで問題は完全に解決しました。もちろん、ここでわかるように、すべてのボタンが中央に向かってわずかに移動しました。
http://pics.livejournal.com/andre_po/pic/00004t7f
しかし、これは妥当な価格です。