Ответ 1
Вместо того, чтобы снова задавать заголовок, вы можете снова установить кнопку с заголовком, а затем оживить его:
(void)setRightBarButtonItem:(UIBarButtonItem *)item animated:(BOOL)animated
У меня есть подкласс 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
.
Есть ли способ изменить заголовок более плавно?
Вместо того, чтобы снова задавать заголовок, вы можете снова установить кнопку с заголовком, а затем оживить его:
(void)setRightBarButtonItem:(UIBarButtonItem *)item animated:(BOOL)animated
Другим решением было бы изменить название без анимации.
[UIView performWithoutAnimation:^{
self.navigationItem.rightBarButtonItem.title = @"Mellansvår";
}];
Вы можете полностью пропустить анимацию, если вы измените название UIBarButtonItem, пока оно не привязано к navigationItem, например:
UIBarButtonItem *tempItem = self.navigationItem.rightBarButtonItem;
self.navigationItem.rightBarButtonItem = nil;
tempItem.title = @"Mellansvår";
self.navigationItem.rightBarButtonItem = tempItem;
Анимация полностью исчезнет, но визуальный эффект выглядит лучше ИМХО.