UIBarButtonItem自定义背景外观翻转过渡后的“跳转”

出于某种原因,当我为uibarbutton项目设置自定义背景图片时:

UIImage *button30 = [[UIImage imageNamed:@"nav_bar_button_orange.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 5, 0, 5)]; [[UIBarButtonItem appearance] setBackgroundImage:button30 forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

我的button是“跳跃”或更新它的宽度(或更准确地说,在文本的每一边填充)在水平翻转。

 self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Cancel" style:UIBarButtonItemStylePlain handler:^(id sender) { [self dismissViewControllerAnimated:YES completion:nil]; }]; 

忽略处理程序位,我正在使用BlocksKit。

你可以看到它发生在这里: http : //screencast.com/t/HZRBS70OT6wt

附加信息

甚至当我把这个button放在故事板而不是代码的时候,它也会这样做。 似乎只发生在水平翻转。

原因:

显然这与使用自定义字体有关。 几乎就像它不是一开始就计算宽度。

示例项目

在此示例项目中重新创build了该问题 。 如果有人知道如何解决这个问题,会很乐意。 不能相信没有人遇到它。

我不知道这种行为的原因,但设置图像插入有助于解决这个问题。 在这里输入图像说明

无论何时您需要在barbutton中进行修改,最好使用自定义视图进行初始化。

 UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; [button setImage:button30 forState:UIControlStateNormal]; [button addTarget:self action:@selector(dismissFuction:) forControlEvents:UIControlEventTouchUpInside]; UIBarButtonItem *barButton = [[UIBarButtonItem alloc] initWithCustomView:button];