iOS 5自定义标签栏图像垂直对齐

时间:2012-05-10 12:23:19

标签: iphone ios ios5

我的自定义标签栏出现了一些奇怪的行为。图像似乎不正确对齐。这是一个截图(我删除了自己的标签栏背景以突出我的问题):

screenshot

以下是我用于为每个州设置图像的代码:

self.tabBarController = [[[UITabBarController alloc] init] autorelease];
self.tabBarController.viewControllers = [NSArray arrayWithObjects:homeNavController, whatsOnNavController, mapNavController, infoNavController, nil];
self.tabBarController.delegate = self;

// For iOS 5 only - custom tabs
if ([self.tabBarController.tabBar respondsToSelector:@selector(selectedImageTintColor)]) 
{

    // Set the background images
    //[[UITabBar appearance] setBackgroundImage: [UIImage imageNamed:@"nav_bg.png"]];
    [[UITabBar appearance] setSelectionIndicatorImage:[UIImage imageNamed:@"nav_over.png"]];

    [homeNavController.tabBarItem setFinishedSelectedImage:[UIImage imageNamed:@"nav_home_over"] withFinishedUnselectedImage:[UIImage imageNamed:@"nav_home"]];
    [whatsOnNavController.tabBarItem setFinishedSelectedImage:[UIImage imageNamed:@"nav_whats_on_over"] withFinishedUnselectedImage:[UIImage imageNamed:@"nav_whats_on"]];
    [mapNavController.tabBarItem setFinishedSelectedImage:[UIImage imageNamed:@"nav_map_over"] withFinishedUnselectedImage:[UIImage imageNamed:@"nav_map"]];
    [infoNavController.tabBarItem setFinishedSelectedImage:[UIImage imageNamed:@"nav_info_over"] withFinishedUnselectedImage:[UIImage imageNamed:@"nav_info"]];

}

我的所有替换标签图像都是正确的尺寸(非视网膜版本高49像素,宽80像素)。

可能导致这种奇怪行为的原因是什么?

---更新---

以下是具有背景的更新屏幕截图:

screenshot 2

6 个答案:

答案 0 :(得分:66)

UIBarItem上有一个属性(UIBarButton项继承自此类)imageInsets

要为finishedSelectedImagefinishedUnselectedImage使用全高图像(49像素),您需要设置这些图像插图:

tabBarItem.imageInsets = UIEdgeInsetsMake(6, 0, -6, 0);

答案 1 :(得分:24)

您现在可以在Storyboard中解决此问题。故事板大小检查器图像插入调整 Storyboard Size Inspector for Tab Bar Item

选择要调整的标签栏项目,打开“大小检查器”,然后调整“顶部和底部图像插入”。你需要调整它们相同的数量,否则它们只会挤压/拉伸你的图像(所以在顶部+5,在底部-5)

答案 2 :(得分:3)

这可能看起来有点像hackish但我相信这是你能达到你想要的唯一方法:你只需要使用标签栏完成的图像,其中有一个透明的11像素“顶部填充”(视网膜为22像素)。然后你的图像必须是60px(120px)高。

我的应用程序使用此技术进入App Store,因此您可以安全地使用它。

希望它有所帮助!

答案 3 :(得分:3)

此API的文档记录很少。

你的finishedSelectedImage应该是一个图标~30x30像素。这只是选项卡的图标部分。如果您创建的finishedSelectedImage太高,系统就不会将其放在屏幕底部。

从概念上讲,您从tabBar的全宽,49px高backgroundImage开始,添加单标签宽度,49px高selectionIndicatorImage,其作为所选标签的背景图像,然后添加每个标签图标的两个版本~30x30像素,finishedUnselectedImagefinishedSelectedImage

答案 4 :(得分:2)

事实证明,你应该总是在tabitem中有文字。空间由空白文本创建。

答案 5 :(得分:-1)

如果您将图像添加为子视图而不是定义了框架,则可以帮助您。  Check this

尝试使用略小的图片,tabbar稍微重新定位