При изменении заголовка 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 к элементу навигации. Я не могу сделать это в Интерфейсном Разработчике, потому что панель навигации прибывает из UINavigationController,

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

3 ответа

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

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

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

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

Вы можете вообще пропустить анимацию, если измените заголовок UIBarButtonItem, пока он не присоединен к навигационному элементу, например так:

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

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

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