在iOS中更改uiTabBarItem的可调整大小的背景图像/颜色

时间:2015-03-26 21:44:32

标签: ios uitabbar

我需要做一个相当简单的任务。

我有一个标签栏,需要在选中时更改条形图的背景颜色。

我一直在寻找一个令人尴尬的解决方案的时间。

大多数指南都讨论了TabBarItem的SelectedImage属性,但是我需要这个东西在大小上是完全动态的。图像仅适合单个设备上的一个方向。

以下是我要完成的内容的截图:

enter image description here

理想情况下,我只想将选定的标签背景颜色设置为白色。有人可以告诉我如何做到这一点?

非常感谢!

2 个答案:

答案 0 :(得分:1)

发布此信息以防有人以后需要。

该解决方案由三部分组成。

第1部分。 设置您的UITabBar'项目定位'物业从自动到中心。这将允许您设置标签栏项目的宽度。标签栏项目的高度始终为49.

第2部分。 使用此函数可以从颜色和特定大小创建UIImage:

- (UIImage *)imageFromColor:(UIColor *)color forSize:(CGSize)size withCornerRadius:(CGFloat)radius
{
CGRect rect = CGRectMake(0, 0, size.width, size.height);
UIGraphicsBeginImageContext(rect.size);

CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, [color CGColor]);
CGContextFillRect(context, rect);

UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

// Begin a new image that will be the new image with the rounded corners
// (here with the size of an UIImageView)
UIGraphicsBeginImageContext(size);

// Add a clip before drawing anything, in the shape of an rounded rect
[[UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:radius] addClip];
// Draw your image
[image drawInRect:rect];

// Get the image, here setting the UIImageView image
image = UIGraphicsGetImageFromCurrentImageContext();

// Lets forget about that we were drawing
UIGraphicsEndImageContext();

return image;
}

第3部分。 现在您已准备好实际设置选项卡项背景颜色。

[[UITabBar appearance] setSelectionIndicatorImage:[self imageFromColor:[UIColor whiteColor] forSize:CGSizeMake(tabBar.itemWidth, 49) withCornerRadius:0]];

为什么这不是在Interface Builder中实现的东西超出我的范围。但这很有效。

答案 1 :(得分:0)

这可能无法完全解决您的问题,但可能会为您提供UIImage动态大小的线索

- (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets resizingMode:(UIImageResizingMode)resizingMode