带有背景图像的UIBarButtonItems

时间:2015-06-19 11:10:19

标签: ios objective-c uibarbuttonitem uitoolbar uiappearance

我们的应用程序中有一个“底栏”,目前只有一个UIView,并且定义了整个地方导致不一致等...

我正在尝试将其替换为UIToolBarUIBarButtonItems,因此我可以使用UIAppearance协议自定义外观。

我们在工具栏中使用的按钮具有由可调整大小的图像组成的背景图像(在资产目录中定义)。

我们希望它看起来像这样......

Desired result

按钮很好地居中位于工具栏的顶部和底部之间。

然而,当我使用UIAppearance协议设置背景图像时会发生什么......

Actual result

按钮垂直对齐偏离中心。

看起来文本位于同一个地方并且背景正在文本周围应用,但文本实际上低于中心。没有BG这是有道理的,但使用BG它不起作用。

我可以在每个按钮的代码中更改帧,但这并不理想,因为我们回到了我想要解决的不一致问题。

有没有办法在一个地方为UIBarButtonItem的所有实例更改此内容?

我甚至尝试在图像底部添加透明度以“向上推”但它没有效果。

更新以显示问题

在enw项目中,我在导航控件中嵌入了一个视图控制器rand使用此代码......

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    [self.navigationController setToolbarHidden:NO animated:animated];
}

- (NSArray *)toolbarItems
{
    return @[
             [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil],
             [[UIBarButtonItem alloc] initWithTitle:@"Hello" style:UIBarButtonItemStyleDone target:nil action:nil],
             [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil],
             [[UIBarButtonItem alloc] initWithTitle:@"World!" style:UIBarButtonItemStyleDone target:nil action:nil],
             [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil],
             [[UIBarButtonItem alloc] initWithTitle:@"Goodbye!" style:UIBarButtonItemStyleDone target:nil action:nil],
             [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil]
             ];
}

结果是......

Default toolbar style

然后我使用UIAppearance代码......

[[UIToolbar appearance] setTintColor:[UIColor whiteColor]];
[[UIToolbar appearance] setBarTintColor:[UIColor colorWithRed:0.15 green:0.2 blue:0.85 alpha:1.0]];

结果是......

Blue toolbar with white tint colour.

这看起来不错,但是当我添加背景图片时......

Resizable button image

使用代码......

[[UIBarButtonItem appearance] setBackgroundImage:[UIImage imageNamed:@"ToolBarButtonBackgroundEnabled"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

我看到了......

Button backgrounds are below centre

我尝试更改标题位置调整...

[[UIBarButtonItem appearance] setTitlePositionAdjustment:UIOffsetMake(0, -5) forBarMetrics:UIBarMetricsDefault];

但这只会移动按钮内的文字......

Buttons with offset titles

它不会移动按钮背景。

我无法找到与工具栏外观中按钮偏移有关的任何内容。

移动文字

我把文字留在同一个地方我错了。将背景添加到小节按钮项目时,文本会移动...

Merged image of with and without background

我合并了工具栏的截图,有或没有按钮背景。您可以看到文本向下移动。

2 个答案:

答案 0 :(得分:0)

你试过[xyzbtn setImageEdgeInsets:UIEdgeInsetsMake(10, 10, 10, 10)]; 或者您的图像大小大于按钮的大小,因此可能会影响布局。

答案 1 :(得分:0)

我注意到了同样的事情:如果你设置了一个背景图像,那么UIBarButtonItem会向下移动3pt。它也向右移动1pt。

这似乎不会发生在iOS 11中,这是个好消息。

我的猜想是,苹果公司假设如果你有一个背景图像设置,那你就试图指出一个被选中的背景图像。按钮状态,他们故意将按钮向下移动一点,以便给出三维运动外观。