При изменении заголовка UIBarButtonItem переход вяло/мерцает

У меня есть подкласс UIViewController. Я даю контроллеру вида rightBarButtonItem в viewDidLoad следующим образом:

self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Difficulty"
      style:UIBarButtonItemStylePlain
      target:nil
      action:nil];

Когда пользователь нажимает другую кнопку в представлении, заголовок/текст UIBarButtonItem изменяется следующим образом:

self.navigationItem.rightBarButtonItem.title = @"Mellansvår";

Он отлично работает, но когда название изменено, оно выглядит не очень хорошо. Текст перескакивает немного.

Я изменил текст UILabel во время выполнения раньше, и когда я изменяю их текст, это не похоже на это, но я не знаю, как добавить UILabel в navigationItem. Я не могу сделать это в интерфейсе Builder, потому что панель навигации происходит от UINavigationController.

Есть ли способ изменить заголовок более плавно?

Ответ 1

Вместо того, чтобы снова задавать заголовок, вы можете снова установить кнопку с заголовком, а затем оживить его:

(void)setRightBarButtonItem:(UIBarButtonItem *)item animated:(BOOL)animated

Ответ 2

Другим решением было бы изменить название без анимации.

[UIView performWithoutAnimation:^{
    self.navigationItem.rightBarButtonItem.title = @"Mellansvår";
}];

Ответ 3

Вы можете полностью пропустить анимацию, если вы измените название UIBarButtonItem, пока оно не привязано к navigationItem, например:

UIBarButtonItem *tempItem = self.navigationItem.rightBarButtonItem;
self.navigationItem.rightBarButtonItem = nil;
tempItem.title = @"Mellansvår";
self.navigationItem.rightBarButtonItem = tempItem;

Анимация полностью исчезнет, ​​но визуальный эффект выглядит лучше ИМХО.