如何在大型导航栏上使用图像作为标题?
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 的未来版本。
您还可以将 container
的 width
和 height
设置为 0
并从那里进行试验。这就是通过反复试验手动找到正确的帧值。
我正在尝试将图片设置为大型导航栏上的标题。到目前为止,我可以让它在顶部中心显示徽标,就像它是标准导航栏一样。
我正在尝试用图片替换“所有收件箱”。
目前我得到这样的东西
通过使用 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 的未来版本。
您还可以将 container
的 width
和 height
设置为 0
并从那里进行试验。这就是通过反复试验手动找到正确的帧值。