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

时间:2018-10-13 23:58:34

标签: ios swift uinavigationbar titlebar large-title

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

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

enter image description here

此刻我正在得到这样的东西 通过使用self.navigationItem.titleView = UIImageView(image #i ageLiteral(resourceName: “logo pic”)) enter image description here

注意-标题文本“设置”未出现,但徽标/图像在该位置显示为“徽标”。 (我希望图片/徽标位于第一张图片的下方,并且位于左侧)

2 个答案:

答案 0 :(得分:0)

好了,您已经可以将图像放置在栏中了,因此现在只需调整视图大小即可使其适合您的期望位置。

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

编辑:经过一些试验,我设法做到了您想要的。这有点骇人听闻,您可能需要自己找出正确的尺寸值,但我设法实现了这种观点:

the logo positions at the correct point

这是通过添加名为“容器”的UIView作为titleView来完成的,然后包含UIImageView。尽管“容器”主要限于工具栏的“顶部”部分,但是现在包含的UIImageView可以在导航栏中自由移动。您会看到这有点骇人听闻:

the logo is right over the usual title text, the container is black

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

view hierarchy

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

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

正如我所说,这是骇人听闻的,当然不是Apple想要的。此解决方案可能无法在将来的iOS版本中使用。

您还可以将width的{​​{1}}和height设置为container并从那里进行实验。都是通过反复试验手动找到正确的帧值。

答案 1 :(得分:0)

  

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

好吧,你不能。大标题是标题;大标题是标题。它是文字。它不能是图像。标题视图可以是图像,但它位于导航栏的中心。您显示的屏幕截图正确;这就是它的外观。结束。停止尝试滥用框架。