5

我正在尝试在我的标签栏上设置自定义背景图像。我有名为“tabbarBack.png”的图像,大小为 640x92。在我的代码中,我是这样设置的。

[[[self tabBarController] tabBar] setBackgroundImage:[UIImage imageNamed:@"tabbarBack.png"]];

当我在设备上测试它时,标签栏比它应该大两倍?有什么帮助吗?

亲切的问候

4

4 回答 4

7

调整图像大小可能会导致其分辨率丢失,因为它是基于像素的。与其使用 setBackgroundImage(它不允许您调整图像大小)并在 Xcode 之外更改图像,为什么不将背景图像作为标签栏的子视图插入呢?这样您就可以在 XCode 中调整图像框架的大小并保持图像文件不变!

/* TAB BACKGROUND IMAGE */
UIImageView *tabBackground = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 49)];
tabBackground.image = [UIImage imageNamed:@"BackgroundImage.png"];
tabBackground.contentMode = UIViewContentModeScaleAspectFill;
[self.tabBar insertSubview:tabBackground atIndex:0];

默认选项卡尺寸为 320x49 - 如果您的选项卡栏尺寸是自定义的,请在上面调整 initWithFrame:CGRectMake。最后,如果您将其他图像作为子视图添加到选项卡栏,请确保在添加背景图像之前添加这些图像。

于 2014-02-07T22:02:02.117 回答
5

试试下面两行

self.tabBarController.tabBar.autoresizesSubviews = NO;
self.tabBarController.tabBar.clipsToBounds = YES;
于 2012-12-17T10:09:19.430 回答
1

NSAddict 的评论:将您的图像重命名为 tabbarBack@2x.png。这称为 Retina 显示器的像素加倍。

如果没有@2x,iOS 不知道它应该应用一个比例因子,它会按原样使用,尽管它应该减半。

所以一个黑客是:

[[[self tabBarController] tabBar] setBackgroundImage:[UIImage imageNamed:@"tabbarBack@2x.png"]];

现实中应该有

  • tabbarBack png (45 px 左右)
  • tabbarBack@2x.png

所以你只说

[[[self tabBarController] tabBar] setBackgroundImage:[UIImage imageNamed:@"tabbarBack.png"]];
于 2012-12-17T10:05:15.500 回答
1

检查您是否有此行:

    [[UITabBar appearance] setShadowImage:image];

您必须将其删除或设置为零。

于 2014-03-14T22:41:47.457 回答