2

我正在使用 UIAppearance 自定义导航栏、标签栏和 uibarbuttonitem 等元素。除了 UIBarButtonItem 元素的一个非常奇怪的行为之外,它工作得很好。在导航控制器层次结构的顶层,一切看起来都不错,但是如果我按下下一个视图控制器,UIBarButtonItem 元素会向下移动一点,但同时,后退按钮会保持在正确的位置。我附上了两张图片来说明我的问题。

1) 导航控制器层次结构中的第一个视图控制器

在此处输入图像描述

2) 导航控制器层次结构中的第二个视图控制器

在此处输入图像描述

编辑:代码

    //Change navigation bar appearance
    [[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"GPNavigationBarBackground.png"] forBarMetrics:UIBarMetricsDefault];
    [[UINavigationBar appearance] setShadowImage:[[UIImage alloc] init]];
    [[UINavigationBar appearance] setShadowImage:[UIImage imageNamed:@"GPNavigationBarShadow.png"]];

    [[UINavigationBar appearance] setTitleTextAttributes:
     [NSDictionary dictionaryWithObjectsAndKeys:
      [UIColor whiteColor], UITextAttributeTextColor,
      [UIFont boldSystemFontOfSize:17], UITextAttributeFont,nil]];
    [[UINavigationBar appearance] setTitleVerticalPositionAdjustment:2.f forBarMetrics:UIBarMetricsDefault];

    UIImage *buttonBackground = [[UIImage imageNamed:@"GPNavigationBarButton.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 10, 0, 10)];
    UIImage *buttonPressedBackground = [[UIImage imageNamed:@"GPNavigationBarButtonPressed.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 10, 0, 10)];

    UIImage *backButtonBackground = [[UIImage imageNamed:@"GPNavigationBarBackButton.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 15, 0, 10)];
    UIImage *backButtonPressedBackground = [[UIImage imageNamed:@"GPNavigationBarBackButtonPressed.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 15, 0, 10)];

    [[UIBarButtonItem appearance] setBackgroundImage:buttonBackground forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
    [[UIBarButtonItem appearance] setBackgroundImage:buttonPressedBackground forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault];

    [[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonBackground forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
    [[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonPressedBackground forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault];

    [[UIBarButtonItem appearance] setBackButtonBackgroundVerticalPositionAdjustment:1.f forBarMetrics:UIBarMetricsDefault];
    [[UIBarButtonItem appearance] setBackgroundVerticalPositionAdjustment:1.f forBarMetrics:UIBarMetricsDefault];
    [[UIBarButtonItem appearance] setTitlePositionAdjustment:UIOffsetMake(0, 1.f) forBarMetrics:UIBarMetricsDefault];
4

1 回答 1

5

好吧,在思考了这个问题之后,我终于解决了。上面的代码是绝对正确的。唯一的问题是 UIBarButtonItem 背景图像的高度。UIAppearance 代理允许您设置所有图形,但不允许您更改 UIBarButtonItem 的高度。

因此,在自定义 UIBarButtonItem 时,请始终记住 UIBarButtonItem 不能高于 30pt。这意味着自定义艺术品不应超过此尺寸。

您可以设置高于 30pt 的背景图像,但您会遇到与上述相同的问题。

于 2013-01-14T21:14:16.357 回答