2013-03-07 83 views
1

出于某种原因,当我设置为uibarbutton项目自定义背景图片后的UIBarButtonItem自定义背景外观“跳”:翻动过渡

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。如果有人知道如何解决这个问题,会很乐意。不能相信没有人遇到它。

+0

你在哪里运行self.navigationItem.leftBarButtonItem代码,在viewDidLoad中? – 2013-03-07 02:02:02

+0

@PatrickTescher是在viewDidLoad中。 – 2013-03-07 03:12:14

+0

它几乎看起来像它在后退按钮和常规按钮之间切换。也许尝试seding setBackgroundVerticalPositionAdjustment:forBarMetrics: – 2013-03-07 18:30:44

回答

4

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

+0

真棒引入的外观定制的东西。这样可行。如果有人知道原因并提供更好的解决方案,请稍后再打开,否则我会标记它。谢谢! – 2013-03-07 21:50:38

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]; 
+0

使用UIBarButtonItems是完全可以接受的。你不需要为一切添加按钮。 – 2013-03-07 01:59:15

+0

我也知道这一点,但UIBarbutton是不是很开放定制 – 2013-03-07 04:48:12

+0

丰富的可定制。查看iOS5 – 2013-03-07 18:21:27