自定义标签栏背景图片太大

Posted

技术标签:

【中文标题】自定义标签栏背景图片太大【英文标题】:custom tabbar background image is too big 【发布时间】:2012-12-17 10:00:57 【问题描述】:

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

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

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

亲切的问候

【问题讨论】:

将图片重命名为 tabbarBack@2x.png。这称为 Retina 显示屏的像素加倍 【参考方案1】:

调整图像大小可能会导致它失去分辨率,因为它是基于像素的。 与其使用 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。最后,如果您将其他图像作为子视图添加到标签栏,请确保在添加背景图像之前添加这些图像。

【讨论】:

【参考方案2】:

试试下面两行

self.tabBarController.tabBar.autoresizesSubviews = NO;
self.tabBarController.tabBar.clipsToBounds = YES;

【讨论】:

【参考方案3】:

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"]];

【讨论】:

当我这样做的时候。标签栏变得更大了。 它不再起作用了,因为现在连苹果都支持多种分辨率和自动布局... !?你当然必须为正确的 res 设置正确的图像——没有理由拒绝投票:)【参考方案4】:

检查你是否有这一行:

    [[UITabBar appearance] setShadowImage:image];

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

【讨论】:

以上是关于自定义标签栏背景图片太大的主要内容,如果未能解决你的问题,请参考以下文章

iOS 自定义标签栏项目比标签栏高

自定义标签栏背景图像未正确显示

swift和xcode 6中的自定义标签栏

自定义“更多”标签栏

iPhone X 自定义标签栏问题

自定义标签栏问题