Элементы панели навигации анимируются, когда [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 с анимацией.