Ios 更改UIBarButtonItem标题时,过渡会突然/闪烁

Ios 更改UIBarButtonItem标题时,过渡会突然/闪烁,ios,uibarbuttonitem,Ios,Uibarbuttonitem,我有一个UIViewController子类。我在viewDidLoad中给视图控制器一个rightbuttonItem,如下所示: self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Difficulty" style:UIBarButtonItemStylePlain target:nil action:nil]; self.navigatio

我有一个
UIViewController
子类。我在
viewDidLoad
中给视图控制器一个rightbuttonItem,如下所示:

self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Difficulty"
      style:UIBarButtonItemStylePlain
      target:nil
      action:nil];
self.navigationItem.rightBarButtonItem.title = @"Mellansvår";
UIBarButtonItem *tempItem = self.navigationItem.rightBarButtonItem;
self.navigationItem.rightBarButtonItem = nil;
tempItem.title = @"Mellansvår";
self.navigationItem.rightBarButtonItem = tempItem;
当用户按下视图中的另一个按钮时,
UIBarButtonItem
的标题/文本如下所示:

self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Difficulty"
      style:UIBarButtonItemStylePlain
      target:nil
      action:nil];
self.navigationItem.rightBarButtonItem.title = @"Mellansvår";
UIBarButtonItem *tempItem = self.navigationItem.rightBarButtonItem;
self.navigationItem.rightBarButtonItem = nil;
tempItem.title = @"Mellansvår";
self.navigationItem.rightBarButtonItem = tempItem;
它工作得很好,但是当标题改变时,它看起来不太好。文本有点跳跃

我以前在运行时更改过
UILabel
文本,当我更改它们的文本时,它们看起来不像这样,但我不知道如何向导航项添加
UILabel
。我无法在Interface Builder中执行此操作,因为导航栏来自
UINavigationController


有没有办法更顺利地更改标题?

您可以使用标题再次设置按钮,然后设置动画,而不是再次设置标题:

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

另一个解决方案是在没有动画的情况下更改标题

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

如果在UIBarButtonim标题未附加到navigationItem时更改它,则可以完全跳过该动画,如下所示:

self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Difficulty"
      style:UIBarButtonItemStylePlain
      target:nil
      action:nil];
self.navigationItem.rightBarButtonItem.title = @"Mellansvår";
UIBarButtonItem *tempItem = self.navigationItem.rightBarButtonItem;
self.navigationItem.rightBarButtonItem = nil;
tempItem.title = @"Mellansvår";
self.navigationItem.rightBarButtonItem = tempItem;
动画将完全消失,但视觉效果看起来更好