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

big*_*mac 12 iphone xcode

我正在将我的iPhone应用程序升级到高分辨率图形,我遇到了旧设备的一些问题.这种情况涉及我的UITabBar图标.看一看:

替代文字

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

所以,我真的很困惑.我已经阅读了Apple的文档,据我所知,我正在做他们需要的一切.在我的应用程序包中,我的图像命名为:

  • 制表featured.png
  • tab-featured@2x.png
  • 制表topics.png
  • tab-topics@2x.png
  • (...等等...)

在界面构建器中,我已指定要在选项卡栏中使用的每个图像的低分辨率版本(文件名为WITHOUT"@ 2x").如果我正确理解iPhone文档,设备应自动检测屏幕分辨率并显示高分辨率版本(如果可用).所以,如果有的话,我的iPod touch几乎看不到它的显示分辨率.我在这里错过了一些东西吗?

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

更新1:

到目前为止没有运气.我采用手动方法并将以下内容添加到viewDidLoad我的命令中UITabBarController:

- (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];
}
Run Code Online (Sandbox Code Playgroud)

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

更新2:

关于詹姆斯的评论:

是的,我能够解决这个问题.在XCode中,文件引用似乎是一个错误.我的想法已经用完了,所以我回过头来开始从我的应用程序中删除所有的@ 2x图像,只是为了让所有内容再次使用低分辨率的艺术作品正确显示.一旦应用程序再次显示适当大小的图像(虽然分辨率很低),然后我逐一添加@ 2x图像,等待一些东西中断.第二次进入似乎工作正常.不知道为什么或发生了什么.SDK似乎只是交换了一些关于发生了什么的电线.

Dan*_*Ray 4

据我了解,神奇之处在于 UIImage 的imageNamed:,imageWithContentsOfFile:initWithContentsOfFile:方法。传递其中一个不带“@2x”或文件扩展名的 NSString 文字,它会神奇地找到适合您设备的文件的正确版本。

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