【问题标题】:ios navigation bar right button item shifts when pushing new view controllerios导航栏右键项目在推送新视图控制器时发生变化
【发布时间】:2012-07-30 13:32:37
【问题描述】:

我有一组三个 VC,它们通过导航控制器进行协调并使用导航栏。在这个导航栏上,在每个 VC 中,我添加了相同的按钮(“注销”按钮)作为右栏按钮项:

UIBarButtonItem *logoutButton = 
[[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"LogoutButtonTitle", @"")
                                     style:UIBarButtonItemStyleBordered 
                                     target:self 
                                     action:@selector(logout)];

[categoriesViewController.navigationItem setRightBarButtonItem:logoutButton];
[[self navigationController] pushViewController:categoriesViewController animated:YES];

所以每个视图控制器在导航栏中都有这个注销按钮。当我将这些控制器中的任何一个推送到导航堆栈上时,新的视图控制器会按预期加载,一切都显示并正常运行,但是在显示新视图控制器之后(动画完成后),注销按钮会移动大约 3px 到正确的。

我尝试在推动 VC 之前添加按钮,在 VC 的 init 方法中,在 viewDidLoad 和 viewDidAppear 中,但仍然是相同的行为。我似乎无法摆脱这种转变。

奇怪的是,当按下新的 VC(使用默认动画)时,后退按钮消失并重新出现,但“注销”按钮似乎留在原地,只是在动画完成后向右移动。另外,按钮上的字体不是默认字体而是系统字体之一(Helvetica light),可能与此有关。

关于为什么会发生这种情况的任何想法?

【问题讨论】:

  • 因为我没有使用默认字体。不知何故,当用不同的字体在屏幕上渲染按钮时,它的框架需要重新计算——或者这是我最好的猜测。
  • 我也遇到了同样的问题——你最终解决了吗?

标签: ios uinavigationcontroller uinavigationbar uinavigationitem


【解决方案1】:

我遇到了同样的问题。这是因为您的 rootviewcontroller 未设置。将您的第一个导航栏作为 rootviewcontroller 的主页或第一页设置为。从那里 [self.navcontroller] pushviewcontroller...]。

【讨论】:

    【解决方案2】:

    尝试调用

    self.navigationItem.rightBarButtonItem = yourUIBarButtonItem;
    

    还有什么是你的注销按钮,它是正确的类吗?也许更多的代码?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-30
      • 1970-01-01
      • 2018-03-08
      • 2014-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多