2013-11-16 4 views
1

Начиная с iOS 7, rightBarButtonItem в моем UINavigationBar сбрасывается после отклонения модального контроллера. Верхний экран показывает правильное выравнивание. Нижний снимок экрана показывает неправильное выравнивание после отклонения модального контроллера.Как правильно выровнять rightBarButtonItem после отклонения модального контроллера?

enter image description here

- (void) viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] 
     initWithTitle:@"" 
     style:UIBarButtonItemStyleDone 
     target:self 
     action:@selector(didPressRightBarButtonItem) 
    ]; 
    [self.navigationItem.rightBarButtonItem 
     setImage:[UIImage imageNamed:@"shareLightFlat"] 
    ]; 
} 

- (void) didPressRightBarButtonItem 
{ 
    [self.navigationController 
     presentViewController:[[SomePage alloc] init] 
     animated:YES 
     completion:nil]; 
} 

В SomePage, я использую это уволить себя:

[self dismissViewControllerAnimated:YES completion:nil]; 

ответ

1

Я понятия не имею, почему это происходит, но когда я проверил это, он работал нормально, если я изменил название кнопки от @ "до" "". Посмотрите, работает ли это для вас (я получил несколько разные результаты от вас - моя кнопка всегда была неуместной не только после презентации и увольнения).

+0

Hot проклятое Diggity! Волшебное решение, но оно работает! Это похоже на системную ошибку, которая не может обрабатывать пустую строку. – Pwner

+0

После всех этих месяцев я снова столкнулся с той же проблемой. На этот раз кнопка опустилась ниже по другой причине. Если у вас есть кнопка с изображением, и вы случайно делаете 'self.navigationItem.rightBarButtonItem = @" некоторый текст ", он будет опускать кнопку без фактической установки текста. Это просто дружеское напоминание. – Pwner

1

Вы назначаете кнопку стиля UIBarButtonItemStyleDone, а затем устанавливаете изображение. Я думаю, что будет работать лучше:

UIButton * aButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
... // Set frame and addTarget 
[aButton setImage:[UIImage imageNamed:@"shareLightFlat"] forState:UIControlStateNormal]; 
UIBarButtonItem * editBarButton = [[UIBarButtonItem alloc] initWithCustomView:aButton]; 

Я не видел никаких связанных с этим проблем с iOS7.

+0

Я использую стиль «Готово», чтобы получить более темный фон в iOS 6. В iOS 7 стиль игнорируется, потому что кнопки не имеют стиля в iOS 7. – Pwner

2

вам не нужно использовать initWithTitle: @ ""

попробовать это:

UIBarButtonItem *editBarButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"myImage"] style:UIBarButtonItemStyleDone target:self action:@selector(myAction:)]; 

self.navigationItem.rightBarButtonItems = @[editBarButton]; 
+0

Это правильный ответ! Большое вам спасибо @Pagly! +1 – bgolson

+0

Это работает лучше, чем ответ rdelmar. Установка заголовка на одно место создаст небольшой сдвиг. – abhi1992

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