2013-10-10 3 views
8

У меня проблема, что пока я не могу найти решение. Я добавляю новую функцию в свое приложение и хочу добавить второй UIBarButtonItem в левой части моего UINavigationBar. По какой-то причине 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 он также распространяет UIBarButtonItems в UIToolbar. Я установил на кнопку, ярлык, кнопку, ярлык, гибкое пространство, и он отображается как кнопка, ярлык, гибкость, кнопка, ярлык – zambono

2

Там может быть лучше, но исправить распорных вопросы по пунктам панели кнопок на прошивке 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. –

Смежные вопросы