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

时间:2013-03-07 00:53:11

标签: ios objective-c iphone

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

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

我的按钮是“跳跃”或在水平翻转时更新它的宽度(或者更准确地说是文本每侧的填充)。

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

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

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

其他信息

当我在故事板中放置按钮而不是代码时,它甚至会这样做。似乎只发生在水平翻转上。

原因:

显然它与使用自定义字体有关。几乎就像它最初没有正确计算宽度一样。

示例项目

Recreated the problem in this sample project。如果有人知道如何解决这个问题会很高兴。不敢相信没有人碰到它。

2 个答案:

答案 0 :(得分:4)

我不知道这种行为的原因,但设置图片插入有助于解决此问题。 enter image description here

答案 1 :(得分:0)

每当你需要在bar按钮中进行ui修改时,最好用自定义视图初始化它。

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