2013-10-10 73 views
8

我有一個問題,到目前爲止我找不到解決方案。我在我的應用程序中添加了一項新功能,並希望在我的UINavigationBar的左側添加第二個UIBarButtonItem。出於某種原因,iOS 7將此作爲button1,grandCanyon,button2。我無法找到任何方法來消除這兩個按鈕之間的荒謬間隔,這也會導致我的標題不一致。任何人都可以幫忙!?有針對這個的解決方法嗎!?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與自定義視圖。所以我能夠移動自定義視圖的位置。

你可能會需要遍歷UINavigationBar的的子視圖移動他們,如果你僅僅使用UIBarButtonItems有相似圖片:

- (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

確定一秒鐘,我會更新我的答案 –

+0

已更新。你問的也是好事,我記錯了,它是layoutSubviews方法,而不是drawRect。 –