如何在大型导航栏上使用图像作为标题?

How to Use Image as title on large Navigation Bar?

我正在尝试将图片设置为大型导航栏上的标题。到目前为止,我可以让它在顶部中心显示徽标,就像它是标准导航栏一样。

我正在尝试用图片替换“所有收件箱”。

目前我得到这样的东西 通过使用 self.navigationItem.titleView = UIImageView(image #i ageLiteral(resourceName: “logo pic”))

注意 - 标题文本“设置”没有出现,但 logo/image 在显示为“徽标”的地方。 (我希望 image/logo 像第一张图片一样向左下方)

好吧,您已经可以将图像放在栏中了,所以现在只需调整视图的大小,使其适合您想要的位置。

通过调整 UIImage 框架的大小来执行此操作,因为单独调整 UIImageView 的大小在导航栏中不起作用(请参阅 here)。

编辑: 经过一些实验,我设法做到了您想要的。有点hack-y,你可能需要自己找出正确的尺寸值,但我设法实现了这个观点:

这是通过添加标题为 "container" 的 UIView 作为 titleView,然后包含 UIImageView 来完成的。虽然 "container" 主要限于栏的 "top" 部分,但包含的 UIImageView 现在可以在导航栏内自由移动。大家可以看看这个有点hack-y:

在此图像中,您可以看到容器 UIView 具有黑色背景色。它不能像 titleView 一样增长到一定大小。检查视图层次结构会显示徽标的位置:

这是通过以下代码实现的:

let logo = UIImage(named: "logo")

let container = UIView(frame: CGRect(x: 0, y: 0, width: 182, height: 132))
container.backgroundColor = UIColor.clear

let imageView = UIImageView(frame:  CGRect(x: -132, y: 2, width: 182, height: 132))
imageView.contentMode = .scaleAspectFit
imageView.image = logo

container.addSubview(imageView)

self.navigationItem.titleView = container

正如我所说,这是 hack-y,当然不是 Apple 的本意。此解决方案可能不适用于 iOS 的未来版本。

您还可以将 containerwidthheight 设置为 0 并从那里进行试验。这就是通过反复试验手动找到正确的帧值。