导航栏背景图片太大

Posted

技术标签:

【中文标题】导航栏背景图片太大【英文标题】:Navigation Bar Background Image too big 【发布时间】:2012-07-20 09:50:53 【问题描述】:

我正在尝试在我的设置方法中使用setBackgroundImage: forBarMetrics: 更改导航栏的背景图像。

问题是图像不适合栏,看起来图像至少被拉伸到原始尺寸的两倍...

图片尺寸为320 x 44...

我尝试将图像重命名为 @2x,但它并没有改变任何东西...

我尝试将此图像分配给navigationItem.titleView,但视图在边缘被截断...

有没有人提示如何设置图像以使其不会被拉伸?

UINavigationBar *naviBar = [self.navigationController navigationBar];
UIImage *img = [UIImage imageNamed:@"NavBar02@2x.png"];
[naviBar setBackgroundImage:img forBarMetrics:UIBarMetricsDefault];

提前致谢

【问题讨论】:

代码已添加,请看一下谢谢! 不!不要将图像重命名为“@2x”。永远不要这样做,您将始终使用非视网膜版本的图像作为 UI 元素。如果设备有视网膜屏幕,“@2x”是供 ios 自动使用的,而不是低分辨率图像。 【参考方案1】:

好吧,我终于明白了!

问题:导航栏采用 320 x 44 像素的图像,因为 iPhone 中的每个点都是 2 像素,如果您使用导航栏的点,您使用的图像将看起来像拉伸 4 倍(y 为 2x, x 坐标为 2x)。

要解决这个问题,只需将文件扩展名 @2x 添加到您的图像文件(例如 yourImgName@2x.png)。在拖入 Xcode 之前,您必须重命名它!如果您尝试在 Xcode 中重命名它,它将无法正常工作。

ps。不要在你的代码中包含@2x,只是像这样的文件名 [UIImage imageNamed:@"yourImgName.png"]

希望对你有帮助

【讨论】:

只有视网膜 iPhone 每个点需要 2 个像素。这就是为什么你需要准备两套资产。 非常感谢分享。我的问题是我在 xCode 中重命名了 @2x。而且 iOS 不会将我的图像比例设置为 2。谢谢 那么大家对只提供一个视网膜显示版本并允许它按比例缩小以适应非视网膜的想法是什么?我已经尝试过了,视网膜图像在非视网膜手机中看起来很好。 如果您使用 [UIImage imageWithData:data] 创建此图像,因此该图像永远没有任何文件名,会发生什么情况?您如何指定普通图像与@2x 图像?【参考方案2】:

你应该有两个图像。一种是 320x44 像素,名称为 NavBar02.png。另一个是 640x88 像素,名称为 NavBar02@2x.png。

iOS 会根据设备的分辨率选择合适的图片。

【讨论】:

【参考方案3】:

对于所有图标,Apple 推荐以下内容。

要调整大小,请在预览中打开您的图像。去

工具 -> 调整大小。

希望对您有所帮助。

【讨论】:

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

无法设置我的导航栏背景图片

导航栏背景图片

swift 需求: 导航栏和HeaderView 使用一个背景图片。

如何使用资产目录作为导航栏背景图片?

css用背景图片制作导航栏分割线

iOS 7 导航栏背景图片问题