高分辨率UITabBar图标在低分辨率屏幕上全尺寸显示

问题描述:

我正在将我的iPhone应用程序升级到高分辨率图形,而且我遇到了旧设备的一些问题。情况涉及我的UITabBar图标。看一看:高分辨率UITabBar图标在低分辨率屏幕上全尺寸显示

alt text

顶部的截图看起来是正确的。它在运行OS4的最新一代iPhone(新屏幕)上被捕获。但是,第二个截图是完​​全错误的。高分辨率图标以100%的大小显示并且正在裁剪。第二张截图是从我运行OS4的第二代iPod touch(旧屏幕)拍摄的。

所以,我真的很困惑。我已经阅读了Apple的文档,并且据我所知,我正在做他们需要的一切。在我的应用程序捆绑我命名为图片:

在界面生成器,我已经指定的每个图像的低分辨率版本(文件名没有“@ 2X”)在标签栏使用。如果我正确理解iPhone文档,设备应自动检测屏幕分辨率并显示高分辨率版本(如果可用)。所以如果有的话,它几乎就像我的iPod touch不正确地检测其显示分辨率。我可能在这里错过了什么吗?

任何可以提供的帮助或见解,将不胜感激!谢谢。

更新1:

至今没有运气。我把手动方法和增加了以下到我UITabBarControllerviewDidLoad命令:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    UITabBarItem *tab; 
    UIViewController *item; 

    tab = [[UITabBarItem alloc] initWithTitle:@"Featured" image:[UIImage imageNamed:@"tab-featured.png"] tag:0]; 
    item = [self.viewControllers objectAtIndex:0]; 
    item.tabBarItem = tab; 
    [tab release]; 

    tab = [[UITabBarItem alloc] initWithTitle:@"Topics" image:[UIImage imageNamed:@"tab-topics.png"] tag:1]; 
    item = [self.viewControllers objectAtIndex:1]; 
    item.tabBarItem = tab; 
    [tab release]; 

    tab = [[UITabBarItem alloc] initWithTitle:@"Video" image:[UIImage imageNamed:@"tab-video.png"] tag:2]; 
    item = [self.viewControllers objectAtIndex:2]; 
    item.tabBarItem = tab; 
    [tab release]; 

    tab = [[UITabBarItem alloc] initWithTitle:@"Experts" image:[UIImage imageNamed:@"tab-experts.png"] tag:3]; 
    item = [self.viewControllers objectAtIndex:3]; 
    item.tabBarItem = tab; 
    [tab release]; 

    tab = [[UITabBarItem alloc] initWithTitle:@"Events" image:[UIImage imageNamed:@"tab-events.png"] tag:4]; 
    item = [self.viewControllers objectAtIndex:4]; 
    item.tabBarItem = tab; 
    [tab release]; 
} 

这仍然产生相同的结果与上述(标签栏内大截止图标)。有没有人听说过UITabBar填充高分辨率图标对的问题?

更新2:

关于詹姆斯的评论:

是的,我能解决这个问题。这似乎是XCode中文件引用的错误。我没有想法,所以我回滚并开始从我的应用程序中删除所有@ 2个图像,只是为了让低分辨率图稿再次正确显示。一旦应用程序再次显示适当大小的图像(尽管分辨率较低),然后我开始逐一添加@ 2张图像,等待某些内容被打破。第二次进入时似乎工作正常。不知道为什么或发生了什么。 SDK似乎在所发生的事情上得到了一些线索。

+0

你能解决这个问题吗?由于某些原因,我在使用高分辨率图像的iOS 3.1.3设备上部署应用程序时出现了完全相同的问题,与3.1.3设备显示的高分辨率版本PNG文件并裁剪它。 – James 2011-01-22 18:05:33

+0

男人,这个bug是烦人的废话。在XCode的界面构建器中获得相同的结果,并且没有运气通过移除/读取资产来解决它,等等。非常令人沮丧。 [1分钟后] - 现在它工作正常。 – SmartyP 2013-02-17 04:02:19

据我所知,神奇的是在UIImage的imageNamed:imageWithContentsOfFile:initWithContentsOfFile:方法。传递其中一个NSString文字而不使用“@ 2x”或文件扩展名,它会奇迹般地为您的设备找到正确版本的文件。

一个暗示就是,您的标签栏项目的图像需要以编程方式设置。这可能是IB还不够聪明,可以根据设备分辨率动态地选择图像。因此,请尝试在-viewDidLoad方法中手动设置这些图像。

+0

感谢您的回应,不幸的是,这仍然没有成功。我会继续努力到这个线程。 – bigmac 2010-07-08 20:22:27

+0

我看到您发布的代码。尝试离开你的文件名“.png”。据我了解,这些方法将采用一个基本名称作为其NSString参数,并搜索匹配文件与可选的“@ 2x”和文件扩展名。 – 2010-07-09 12:05:11

尝试省略.png文件扩展名。这样做会触发操作系统寻找适当的低分辨率文件和@ 2x版本。这在Apple的“支持高分辨率屏幕”概述中有记载。

+0

我曾尝试删除扩展名,但没有成功。直到我彻底删除并重新链接了我解决此问题的所有图像。 – bigmac 2010-09-07 00:32:12

根据Apple的设计指南,UITabBarItem的图像大小应为30x30和60x60(视网膜)。

http://developer.apple.com/library/ios/#documentation/userexperience/conceptual/mobilehig/IconsImages/IconsImages.html

我面临同样的问题,通过调整图像的大小来解决它。