[self.navigationItem setRightBarButtonItems:items animated:NO]时,导航栏项目是动画的

时间:2013-07-25 09:55:23

标签: ios uinavigationcontroller uinavigationitem uinavigation

我在iOS 6中发现了奇怪的行为,没有对其他版本进行测试。我用视图创建了一个简单的基于导航的应用程序。当我点击第一个视图上的按钮时,会按下第二个视图。然后我点击后退按钮我返回到第一个视图。两个视图都嵌套在DetailViewConotrller中。

@implementation DetailViewController


- (void)viewDidLoad
{
    [super viewDidLoad];

    UIBarButtonItem *searchCancelButton = [[UIBarButtonItem alloc] initWithTitle:@"custom1" style:UIBarButtonItemStyleBordered target:self action:nil];
    [searchCancelButton setBackgroundVerticalPositionAdjustment:3 forBarMetrics:UIBarMetricsDefault];
    UIBarButtonItem *searchCancelButton1 = [[UIBarButtonItem alloc] initWithTitle:@"custom2" style:UIBarButtonItemStyleBordered target:self action:nil];
    [searchCancelButton1 setBackgroundVerticalPositionAdjustment:3 forBarMetrics:UIBarMetricsDefault];
    [self.navigationItem setRightBarButtonItems: [[NSArray alloc] initWithObjects:searchCancelButton, searchCancelButton1, nil] animated:NO];
}


@end

我用方法[self.navigationItem setRightButtonItems: animated:]调用动画参数NO,但按钮仍然是动画。有趣的是,当只使用一个UIBarButtonItem调用此方法时,它的工作正确并且不会出现任何动画。

有没有想过为什么这种方法会这样表现?这是一个错误还是我做错了什么?或者是如何避免导航项目的动画的任何建议。

1 个答案:

答案 0 :(得分:0)

只需将您的代码更改为:

- (void)viewDidLoad
{
 [super viewDidLoad];

  UIBarButtonItem *searchCancelButton = [[UIBarButtonItem alloc] initWithTitle:@"custom1" style:UIBarButtonItemStyleBordered target:self action:nil];
  [searchCancelButton setBackgroundVerticalPositionAdjustment:3 forBarMetrics:UIBarMetricsDefault];
  UIBarButtonItem *searchCancelButton1 = [[UIBarButtonItem alloc] initWithTitle:@"custom2" style:UIBarButtonItemStyleBordered target:self action:nil];
  [searchCancelButton1 setBackgroundVerticalPositionAdjustment:3 forBarMetrics:UIBarMetricsDefault];
  [self.navigationItem setRightBarButtonItems: [[NSArray alloc] initWithObjects:searchCancelButton, searchCancelButton1, nil] animated:NO];

}

使用当前的实现,您可以将导航按钮设置两次。首先使用属性,然后调用方法。可能设置rightBarButtonItems作为带动画的setRightBarButtonItems。