在故事板中添加navigationItem.titleView失败

我可以在代码中非常轻松地将titleView添加到我的navigationItem:

UIImageView *navImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"nav_logo"]]; UIView *titleView = [[UIView alloc] initWithFrame:navImageView.frame]; [titleView addSubview:navImageView]; self.navigationItem.titleView = titleView; 

但是,我正试图在我的故事板中做到这一点,而且我的失败是悲惨的。

这就是我所做的:

  1. 将UIView拖放到VC的导航项顶部。
  2. 将UIImageView拖放到UIView之上
  3. 添加宽度/高度/前导/顶部约束
  4. 设置UIImageView的image属性

我还将我的UIView的背景设置为红色(好吧,更像是烧焦的橙色)来说明问题。

事情的呈现方式如下:

在此处输入图像描述

我很惊讶这一直很困难。 有任何想法吗?

在故事板界面构建器中

  • 选择视图控制器
  • 在属性检查器(⌘⌥4)中的“模拟度量标准”下,对于“顶栏”选择器,选择其中一个导航栏
  • 然后你应该可以在故事板上的标题上拖动UIView
  • 如果您愿意,可以将“顶栏”设置更改回“推断”

这是在标题上拖动UIView后的故事板图像:

将UIView拖过标题后

故事板中的导航项目不可能具有自动布局约束。 我相信你实际上是将视图拖到实际的视图控制器上。 您只能将barButtonItems拖入navigationItem。

另一种选择是

  1. 使用autolayout的情况下在单独的xib中创建视图
  2. 在代码中加载xib
  3. setTranslatesAutoresizingMaskIntoConstraints为true
  4. 将titleView分配给视图

根据我的经验,使用自动布局与navigationBar中的任何视图都不能很好地工作并导致意外的结果。 例如,我遇到了错误,其中呈现UIActivityViewController导致意外的约束被添加到navigationItem的titleView。

之前: 在此处输入图像描述

在演示UIActivityViewController并跳过第3步之后: 在此处输入图像描述

对于那些发现自己在Xcode 8中在UIBarButtonItem中添加自定义视图或UIButton的问题的人来说,解决方案是:Xcode现在仅接受在控制器的视图属性中拖动(Xcode 7允许直接拖动到UINavigationItem)。 如果删除控制器的view ,则可以将项目拖动到导航栏上。 因此,创建新的空导航控制器,删除根视图控制器内的主视图,将项目拖动到导航栏,复制此导航项(而不是栏本身)并将其粘贴到目标控制器,它将替换旧的导航项。 删除那个空控制器后。 利润!

似乎苹果Xcode团队为开发人员提供了比他们的主要产品更激情的新任务。

这个奇怪的问题与大小类有关系。

事实上,我有同样的问题,解决方案是:

  1. 将故事板的大小类设置为Any,Any
  2. 将视图拖放到导航栏项目中。
  3. 重置故事板的大小等级。

一切都像魅力一样!

我认为将视图添加到导航项目的大小类未设置为Any,Any导致问题。

希望这适用于所有人,因为这真的太糟糕了:[。