2013-10-10 7 views
8

これまで解決策が見つからないという問題があります。私は私のアプリケーションに新しい機能を追加して、私のUINavigationBarの左側に2番目のUIBarButtonItemを追加したいと考えています。何らかの理由で、iOS 7はこれをbutton1、grandCanyon、button2としています。私はこれらの2つのボタンの間のばかげた間隔を取り除く方法を見つけることができず、これは私のタイトルが整列していない原因にもなります。誰でも助けることができる!?これには解決策がありますか?iOS 7 UIBarButtonItemばかげたスペースの問題

enter image description here

コード:

UIBarButtonItem *firstButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"firstButton"] style:UIBarButtonItemStylePlain target:self action:@selector(showSettings)]; 
UIBarButtonItem *secondButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"secondButton"] style:UIBarButtonItemStylePlain target:self action:@selector(showAttachments)]; 
[self.navigationItem setLeftBarButtonItems:[NSArray arrayWithObjects:firstButton, secondButton, nil]]; 
+0

ボタンを設定するためのコードを表示します。 – rmaddy

+0

人々がそれを読むことができるように、コードをあなたの質問に入れてください。 – rmaddy

+0

おっと、完了です。投稿を編集できるとは気付かず、ごめんなさい。 – KelticKoder

答えて

4

は、私が使用して問題を整理するために管理したと思います以下のようなカスタムビューでは、完全ではありません(選択するとボタンが暗くなるのではなく暗くなります)が、明日はそれを修正しようとします。私の頭痛が終わってうれしい!助けてくれてありがとう、それは私が試していないいくつかの新しいアプローチに私を導く。

UIImage *firstButtonImage = [UIImage imageNamed:@"firstButton"]; 
firstButtonImage = [firstButtonImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; 

UIButton *firstButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 35, 35)]; 
[firstButton setImage:firstButtonImage forState:UIControlStateNormal]; 
[firstButton addTarget:self action:@selector(firstButtonPressed) forControlEvents:UIControlEventTouchUpInside]; 

UIImage *secondButtonImage = [UIImage imageNamed:@"secondButton"]; 
secondButtonImage = [secondButtonImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; 

UIButton *secondButton = [[UIButton alloc] initWithFrame:CGRectMake(45, 0, 35, 35)]; 
[secondButton setImage:secondButtonImage forState:UIControlStateNormal]; 
[secondButton addTarget:self action:@selector(secondButtonPressed) forControlEvents:UIControlEventTouchUpInside]; 

UIView *leftBarItemsView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 80, 35)]; 
[leftBarItemsView addSubview:firstButton]; 
[leftBarItemsView addSubview:secondButton]; 

UIBarButtonItem *leftBarItem = [[UIBarButtonItem alloc] initWithCustomView:leftBarItemsView]; 

[self.navigationItem setLeftBarButtonItems:[NSArray arrayWithObject:leftBarItem]]; 
+1

ありがとうございました。私は今日この同じ問題に遭遇し、あなたの答えを使って解決しました。 – Isuru

+0

iOS 7では、UIToolbarにUIBarButtonItemsを展開しているようです。ボタン、ラベル、ボタン、ラベル、フレキシブルスペースに私のものを設定し、ボタン、ラベル、フレキシブル、ボタン、ラベルとして表示します – zambono

2

あり良い方法かもしれませんが、iOSの7上のバーボタン項目の間隔の問題を修正するために、私はUINavigationBarをサブクラス化し、layoutSubviewsメソッドをオーバーライドしてきました。ここで、各バーのボタン項目を任意の場所に移動できます。一例として、

:私は私のコードを見て

- (void)layoutSubviews 
{ 
    [super layoutSubviews]; 

    // If iOS 7, fix the bar button positions 
    BOOL isIOS7 = [[[UIDevice currentDevice] systemVersion] compare:@"7" options:NSNumericSearch] != NSOrderedAscending; 
    if (isIOS7) 
    { 
     for (UIBarButtonItem *item in self.topItem.leftBarButtonItems) 
     { 
      // Reposition the customView property 
     } 

     for (UIBarButtonItem *item in self.topItem.rightBarButtonItems) 
     { 
      // Reposition the customView property 
     } 
    } 
} 

実は、私は、カスタムビューでUIBarButtonItemsを使用していました。だから私はカスタムビューの位置を移動することができました。

あなたはこのようなイメージでUIBarButtonItemsを使用している場合は、おそらくそれらを移動するためにUINavigationBarのサブビューをループにする必要があります:

- (void)layoutSubviews 
{ 
    [super layoutSubviews]; 

    // If iOS 7, fix the bar button positions 
    BOOL isIOS7 = [[[UIDevice currentDevice] systemVersion] compare:@"7" options:NSNumericSearch] != NSOrderedAscending; 
    if (isIOS7) 
    { 
     for (UIView *subview in self.subviews) 
     { 
      // Reposition as needed 
     }  
    } 
} 
+0

drawRect:で変更した内容の例がありますか?これについてどうやって行くかわかりません。 – KelticKoder

+0

確かに1秒、私は答えを更新する –

+0

更新します。あなたが頼んだことも良いことですが、私は誤解していました。drawRectではなく、layoutSubviewsメソッドです。 –