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

Posted

技术标签:

【中文标题】如何使用资产目录作为导航栏背景图片?【英文标题】:How to use asset catalog for navigation bar background image? 【发布时间】:2016-01-27 12:41:23 【问题描述】:

我使用带有2x 图像的资产目录用于iPhone5 和6,如docs 中所述:

导航栏背景的图像为 750x128 (750 x 44 * 2 + 20 * 2),因为我还想覆盖状态栏。 750是iPhone6的分辨率宽度。背景图片设置:

self.navigationController?.navigationBar
    .setBackgroundImage(UIImage(named: "nav_bar_bg"), forBarMetrics: .Default)

让我们看看结果:

好的。 iPhone5:

不好。如何在不从资产目录中删除背景图像的情况下缩小它?我真的不想硬编码它。 iPhone5和6的资源分不出来真的很烦。

有什么建议吗?谢谢

【问题讨论】:

【参考方案1】:

抱歉,没有注意到 UINavigationBar 的事情...您可以通过将图片设置为 stretchable 来更改背景中使用的图片的大小。这样您就可以使用适合较小设备(在您的示例中为 iPhone5)的图片,并在 iPhone 6 中保持图片居中。

另一个更复杂的解决方案是完全继承 NavBar 并重写图片的绘制方式。


您应该使用 NSLayoutConstraints(前导、顶部和尾随),并将 UIImageView 内容设置为适合。这样您就不需要更改图像,它会由应用程序自动缩放。

【讨论】:

UINavigationBar 是否提供 api 用于检索 bg 图像视图? 不,它没有。用possible 解决方案更新了我的答案。 谢谢,我认为最好的方法是 NavBar 子类

以上是关于如何使用资产目录作为导航栏背景图片?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 7 导航栏背景图片问题

我应该使用啥尺寸在导航栏上放置背景图片

如何在所有场景中设置导航栏背景颜色

如何将导航栏向右移动并应用背景颜色?

如何更改导航栏的默认背景颜色? [复制]

如何在 ios7 上将导航栏背景图像添加到 MFMailComposeViewController