Элементы панели навигации анимируются, когда [self.navigationItem setRightBarButtonItems: элементы анимированы: НЕТ]

Я обнаружил странное поведение в iOS 6, не тестировал другие версии. Я создал простое навигационное приложение для просмотра. когда я нажимаю на кнопку в первом виде, второй вид нажимается. Когда я нажимаю кнопку "Назад", я возвращаюсь к первому виду. Оба представления вложены в DetailViewConotrller.

@implementation DetailViewController


- (void)viewDidLoad
{
    [super viewDidLoad];

    UIBarButtonItem *searchCancelButton = [[UIBarButtonItem alloc] initWithTitle:@"custom1" style:UIBarButtonItemStyleBordered target:self action:nil];
    [searchCancelButton setBackgroundVerticalPositionAdjustment:3 forBarMetrics:UIBarMetricsDefault];
    UIBarButtonItem *searchCancelButton1 = [[UIBarButtonItem alloc] initWithTitle:@"custom2" style:UIBarButtonItemStyleBordered target:self action:nil];
    [searchCancelButton1 setBackgroundVerticalPositionAdjustment:3 forBarMetrics:UIBarMetricsDefault];
    [self.navigationItem setRightBarButtonItems: [[NSArray alloc] initWithObjects:searchCancelButton, searchCancelButton1, nil] animated:NO];
}


@end

Я называю метод [self.navigationItem setRightButtonItems: animated:] с анимированным параметром NO, но кнопки все еще анимируются. Интересно то, что когда этот метод вызывается только с одним UIBarButtonItem, он работает корректно, и никакой анимации не появляется.

Есть какие-нибудь мысли, почему этот метод ведет себя таким образом? Это ошибка или я что-то не так? Или есть какие-либо предложения, как избежать анимации для элементов навигации.

1 ответ

Просто измените свой код на:

- (void)viewDidLoad
{
 [super viewDidLoad];

  UIBarButtonItem *searchCancelButton = [[UIBarButtonItem alloc] initWithTitle:@"custom1" style:UIBarButtonItemStyleBordered target:self action:nil];
  [searchCancelButton setBackgroundVerticalPositionAdjustment:3 forBarMetrics:UIBarMetricsDefault];
  UIBarButtonItem *searchCancelButton1 = [[UIBarButtonItem alloc] initWithTitle:@"custom2" style:UIBarButtonItemStyleBordered target:self action:nil];
  [searchCancelButton1 setBackgroundVerticalPositionAdjustment:3 forBarMetrics:UIBarMetricsDefault];
  [self.navigationItem setRightBarButtonItems: [[NSArray alloc] initWithObjects:searchCancelButton, searchCancelButton1, nil] animated:NO];

}

С вашей текущей реализацией вы устанавливаете кнопки навигации дважды. Сначала используется свойство, а затем вызывается метод. Вероятно, установка rightBarButtonItems работает как setRightBarButtonItems с анимацией.

Другие вопросы по тегам