tl;dr
我想为UINavigationBar
设置背景图片。有没有一种方法可以配置这个navbar,使其使用scaleAspectFill
-like的行为(就像一个将contentMode
设置为scaleAspectFill
的UIImageView
)?
目标
我有一张大约适合横向iPhone导航栏的图像(高度为64pt,宽度约为800pt;确切的尺寸在这里不重要),我用 navigationBar.setBackgroundImage(img, for: .default)
设置了它作为背景图片。该图像是一张模糊的照片,所以不需要像素完美。顺便说一下 - 我正在使用 UINavigationBar.appearance
来为所有导航栏同时设置背景。
我希望它能够在纵向方向时显示图像的中心部分,在横向方向时则不裁剪地显示整个图像。如果高度不完全匹配(如在iPhone X上所期望的那样),它应该稍微缩放一下以填充额外的高度。
作为后备解决方案,我也会接受中心显示较小宽度的图像,并通过拉伸第一列和最后一列像素来填充额外的水平空间。
我到目前为止尝试过的
- 目标1:设置
UINavigationBar
的contentMode
-- 在渲染图像时似乎被忽略了 - 目标2:使用较小的图像,并使用
stretchableImage(withLeftCapWidth:topCapHeight:)
使其可伸缩 -- 填充了导航栏,但是图像被推到右下角(显然是因为此方法只考虑左边和顶部作为可伸缩的边界) - 目标2:使用较小的图像并使用
resizableImage(withCapInsets:resizingMode:)
,将resizingMode
设置为stretch
-- 在横向方向上,它只是将图像拉伸到完整的宽度,而忽略了容器插图(可能这个方法不做我想象的那样)。